使用delphiXE中的pchar参数调用delphi 2006 dll

Lio*_*ain 1 delphi unicode dll char delphi-xe

自从我从delphi 5升级到XE后,我很难使用前一段时间编译的特定Dll.我的阻塞点似乎与unicode/ansi字符有关,但我还没有找到如何解决问题

这是一个程序示例:

procedure GetFilename(Buffer: PChar; BufSize: Integer); stdcall;
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我这样称呼它

implementation    
procedure GetFilename; external 'myDll.dll' name 'GetFilename';
procedure myproc
var
  buffer : Array [0..255] of Char;
begin
  GetFilename(buffer, length(buffer)-1);
  Showmessage(buffer); //This gives me chinese character
end; 
Run Code Online (Sandbox Code Playgroud)

缓冲区包含:

byte((@buffer[0])^); // 67 which is the ASCII for C
byte((@buffer[1])^); // 92 which is the ASCII for \
Run Code Online (Sandbox Code Playgroud)

我期待正常的是以"C:\"开头的字符串

有人遇到过同样的问题吗?

RRU*_*RUZ 5

因为dll是使用非Unicode版本的Delphi制作的,所以必须更改声明

procedure GetFilename(Buffer: PChar; BufSize: Integer); stdcall;
Run Code Online (Sandbox Code Playgroud)

procedure GetFilename(Buffer: PAnsiChar; BufSize: Integer); stdcall;
Run Code Online (Sandbox Code Playgroud)

和来自的缓冲区变量

buffer : Array [0..255] of Char;
Run Code Online (Sandbox Code Playgroud)

buffer : Array [0..255] of AnsiChar;
Run Code Online (Sandbox Code Playgroud)

另外,要了解Delphi Unicode支持,请查看Delphi and UnicodeMarcoCantú 的白皮书.