1

由于我已经从 delphi 5 升级到 XE,所以我很难使用前一段时间编译的特定 Dll。我的阻塞点似乎与 unicode/ansi 字符有关,但我还没有找到解决问题的方法

下面是一个程序示例:

procedure GetFilename(Buffer: PChar; BufSize: Integer); stdcall;

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

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; 

缓冲区包含以下内容:

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

我期望正常的是一个以“C:\”开头的字符串

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

4

1 回答 1

5

由于 dll 是使用非 Unicode 版本的 Delphi 创建的,因此您必须将声明从

procedure GetFilename(Buffer: PChar; BufSize: Integer); stdcall;

procedure GetFilename(Buffer: PAnsiChar; BufSize: Integer); stdcall;

和缓冲区变量

buffer : Array [0..255] of Char;

buffer : Array [0..255] of AnsiChar;

此外,要了解 Delphi Unicode 支持,请查看Delphi and UnicodeMarco Cantú 的白皮书。

于 2012-07-03T18:02:29.373 回答