精易论坛

标题: dll传参问题 [打印本页]

作者: YXR20061105    时间: 2025-5-15 10:25
标题: dll传参问题
c++写的一个dll,一个函数需要传递结构体数组,但是我在dll命令初勾选了数组和传址后,dll里面的函数运行结束后,调用这个dll的软件就崩溃退出了,但是我把dll命令里面的数组取消勾选,只传单独的结构体变量,没有问题,但是我c++代码里面是对结构体数组操作的,有人能指点一下吗

作者: dnxl    时间: 2025-5-15 10:25
不同语言的数组结构是不一样的,夸语言只能按WIN标准来,数组只传首成员地址和成员数(传入之前这个数组必须分配了内存空间),C++里面再通过地址访问数组成员
作者: 123456ppt    时间: 2025-5-15 10:31
辅助?
作者: 约定踏雪去看花    时间: 2025-5-15 10:35
内存泄漏?dll调用约定是stdcall吗?其他调用约定不行。再就是看看垃圾回收机制
作者: YXR20061105    时间: 2025-5-15 10:41
约定踏雪去看花 发表于 2025-5-15 10:35
内存泄漏?dll调用约定是stdcall吗?其他调用约定不行。再就是看看垃圾回收机制 ...

是stdcall约定,但是单独传结构体而不是结构体数组就正常
作者: lushihao    时间: 2025-5-15 10:45
1095204365 可以帮你看看

作者: 约定踏雪去看花    时间: 2025-5-15 10:56
YXR20061105 发表于 2025-5-15 10:41
是stdcall约定,但是单独传结构体而不是结构体数组就正常

换个思路,你可以单独传结构体,然后写成模块的类,在易语言中调用模块的类,就可以在易语言中用数组了,不一定非要从源头上就用结构体数组,这样的方法对调用来说比较稳定

补充内容 (2025-5-15 10:56):
用易语言调用dll,编译成类模块
作者: YXR20061105    时间: 2025-5-15 10:58
约定踏雪去看花 发表于 2025-5-15 10:56
换个思路,你可以单独传结构体,然后写成模块的类,在易语言中调用模块的类,就可以在易语言中用数组了, ...

好的,谢谢你,我有时间去试试
作者: zs5819    时间: 2025-5-15 12:39
用指针的方式传递
作者: YXR20061105    时间: 2025-5-15 13:51
约定踏雪去看花 发表于 2025-5-15 10:56
换个思路,你可以单独传结构体,然后写成模块的类,在易语言中调用模块的类,就可以在易语言中用数组了, ...

还是不行,我放弃了,改成回调函数类型的了
作者: YXR20061105    时间: 2025-5-15 17:59
dnxl 发表于 2025-5-15 17:53
不同语言的数组结构是不一样的,夸语言只能按WIN标准来,数组只传首成员地址和成员数(传入之前这个数组必 ...

!似乎明白了,但是数组长度是不确定的啊




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4