delphi - 什么是 char 的 Delphi 声明***

标签 delphi

我有一个基于 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/

相关文章:

image - 如何实现类似photoshop的 "patch tool"功能?

delphi - 检查 Windows 资源管理器是否已在给定路径上打开

delphi - 资源管理器在 CreateProcess Hook 上崩溃

delphi - 将字符串写入 TMemoryStream

delphi - 为什么 bool 表达式(有副作用)不足以作为语句?

Delphi动态数组迭代和记录复制

delphi - 自动调整 TCheckBox 的大小(如 TLabel)

delphi - 什么是 .vrc 文件,它是如何生成的,您可以使用 IDE 将其删除吗?

delphi - 当我尝试从表单 A 显示表单 B 时,为什么编译器会显示 "undeclared identifier"?

delphi - 如何在REMOBJECTS DELPHI中为n个参数创建新常量的新列表