我想声明一个外部函数,但我不能这样做。
这是我的Delphi声明,不能编译。
procedure Encode(input:byte^;output:byte^;size:DWORD);cdecl;external 'blowfish.dll';
这是我的C#声明,它有效。
[DllImport("blowfish.dll")]
public static unsafe extern void Encode(byte* input, byte* output, UInt32 size);
我的问题:编译器表达“(”之后的字节^,因为^。如果我创建一个类型mybyte = byte ^;那么我如何用字节数组中的第一个成员调用该函数 - 它然后不能编译,因为数组不是类型“myByte”?
答案 0 :(得分:5)
^
不应该在类型名称之前吗?
procedure Encode(input:^byte;output:^byte;size:DWORD);cdecl;external 'blowfish.dll';
此外,可能dll需要字节数组而不是指向字节的指针。所以你可能也想调整它。 (在C中,数组和指针的声明方式相同。)
答案 1 :(得分:2)
Jqno做对了。另外,你总是可以使用PByte而不是^ byte。
答案 2 :(得分:1)
procedure Encode(CONST input ; VAR output ; size : DWORD); cdecl; external 'blowfish.dll';
或
procedure Encode(input : PByte ; output : PByte ; size : DWORD); cdecl; external 'blowfish.dll';
或
procedure Encode(CONST input ; OUT output ; size : DWORD); cdecl; external 'blowfish.dll';
或
procedure Encode(input : POINTER ; output : POINTER ; size : DWORD); cdecl; external 'blowfish.dll';
所有这些都取决于你的Delphi程序如何调用函数