【发布时间】:2019-05-30 02:34:01
【问题描述】:
我必须从 Delphi(当前为 Delphi7)访问用 c 编写的 DLL 的几个函数。 当参数是标量时,我可以毫无问题地做到这一点 (感谢在这个很棒的网站上找到的示例!),但是当参数中有一个指向 Longs 数组的指针时,我已经卡住了一段时间。
这是其中一个函数在头文件中的定义:
BOOL __stdcall BdcValida (HANDLE h, LPLONG opcl);
(opcl 是一个 long 数组)
这是我的 Delphi 代码的一部分:
type
TListaOpciones= array of LongInt; //I tried with static array too!
Popcion = ^LongInt; //tried with integer, Cardinal, word...
var
dllFunction: function(h:tHandle; opciones:Popcion):boolean;stdcall;
arrayOPciones:TListaOpciones;
resultado:boolean;
begin
.....
I give values to aHandle and array arrayOPciones
.....
resultado:=dllFunction(aHandle, @arrayopciones[0]);
end;
执行时的错误信息是:
"项目 xxx 引发了太多连续异常:访问冲突 在 0x000 ..”
LPLONG 在 Delhpi 中的等价物是什么?还是我以不正确的方式调用该函数? 谢谢!
【问题讨论】:
-
我必须承认我发现函数调用令人困惑,因为如果 opcl 真的是指向数组的指针,而不是单个变量,我看不出 DLL 是如何知道的那个数组很大——也就是说没有参数告诉它,除非它存储在 h 指向的任何地方。
-
DLL 知道数组的大小,它根据上下文而变化,我们通过通知它的 dll 函数知道它。
-
您是说有一个不同的函数来设置 DLL 的数组长度。你确定你设置正确吗?也许您传递的值太高(可能是一个)。
-
缺少代码的相关位,以了解内存分配和释放的对象和位置以及数组大小是如何传递的。