我必须访问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 ..“
在Delhpi中,LPLONG等于什么?还是我以错误的方式调用该函数? 谢谢!
答案 0 :(得分:3)
LONG
映射到Longint
,而LPLONG
映射到^Longint
。因此,您已经正确翻译了该类型。
您对BOOL
的翻译有误。在Delphi中应为BOOL
或LongBool
。您可以使用任何一个,前者是后者的别名。
您的错误在于我们看不到的代码或细节。也许您没有分配数组。数组大小可能不正确。可能是无效的句柄。也许以前对DLL的调用未能检查错误。