我有一个基于 C 的 DLL,它导出一个以 char*** 作为参数的函数,这是一个指向 char 指针的指针(非 unicode) 我的问题是,经过多次挫折,什么是等效声明在德尔福结束?
我试过例如:
// C Method declaration
void method (char*** arg)
TArrayOfPAnsiChar = array of PAnsiChar;
PArrayOfPAnsiChar = ^TArrayOfPAnsiChar;
PPArrayOfPAnsiChar = ^PArrayOfPAnsiChar;
// Delphi declaration
procedure method (var p : PPArrayOfPAnsiChar); cdecl;
p : PPArrayOfAnsiChar;
method (p)
但我没有得到任何明智的返回。有什么建议么?声明中的 var 当然已经是一个指针,所以也许这就是我出错的地方。我尝试了许多变体,在纸上写下结构是什么,并逆向设计了 Delphi 声明,但无济于事。这个 DLL 在其他基于 C 的应用程序中使用,所以我假设它的功能正常。
使用 XE6
最佳答案
不要使用 array of
,因为它声明了一个动态数组,并使用 AnsiChar
而不是 Char
, 因为后者在 Delphi 中是两个字节。
PPAnsiChar = ^PAnsiChar;
PPPAnsiChar = ^PPAnsiChar;
procedure Method(Arg: PPPAnsiChar); cdecl;
或者
procedure Method(var Arg: PPAnsiChar); cdecl;
如果你想像数组一样索引变量,添加
{$POINTERMATH ON}
在声明类型之前
关于delphi - 什么是 char 的 Delphi 声明***,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383734/