[英]What is the Delphi equivalent of ' unsigned char** ' in C
[英]What is the Delphi declaration for char***
我有一個基於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}
在這種情況下,char ***是指向一個指針的指針,該指針指向一個數組,每個元素都指向一個字符串。
這意味着被呼叫者正在將數據返回給呼叫者。 所以你要使用:
procedure method(out Arg: PPAnsiChar); cdecl; external dllname;
其中PPAnsiChar
是^PAnsiChar
。 注意, PPAnsiChar
在System
單元中定義。
C代碼具有三個間接級別。 最外層是函數如何將數據從被調用方傳遞到調用方。 表示為Delphi out
參數。 其余兩個間接級別在PPAnsiChar
中捕獲。 最后,C的char
在Windows上是8位類型,因此映射到AnsiChar
。
函數返回時,您還需要遍歷數組。 像這樣:
var
StrArr: PPAnsiChar;
Str: string;
....
method(StrArr);
while StrArr^ <> nil do
begin
Str := StrArr^;
Inc(StrArr);
end;
我假設數組的長度由終止的空指針指示。 相反,如果您被告知長度,那么應該使用for循環,這應該是顯而易見的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.