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のサポートについては、MarcoCantúのDelphi and Unicodeホワイトペーパーを参照してください。

于 2012-07-03T18:02:29.373 に答える