LPLONG的Delphi等效项是什么?

时间:2019-01-03 13:36:41

标签: delphi dll interop

我必须访问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等于什么?还是我以错误的方式调用该函数? 谢谢!

1 个答案:

答案 0 :(得分:3)

LONG映射到Longint,而LPLONG映射到^Longint。因此,您已经正确翻译了该类型。

您对BOOL的翻译有误。在Delphi中应为BOOLLongBool。您可以使用任何一个,前者是后者的别名。

您的错误在于我们看不到的代码或细节。也许您没有分配数组。数组大小可能不正确。可能是无效的句柄。也许以前对DLL的调用未能检查错误。

相关问题