(D6,XE3/Win7) 他の人がdelphiで作られたDLLを動かすソフトを初めて手掛けました。DLLの内容は計算の基データをXML形式で与えると計算結果がXML形式で排出されるというものです。これをDelphi6(パーソナル)で作って試したところ上手く動いたのでXE3の本番ソフトに組み込もうとしたのですが動きません。何故XE3だと動かないのか、どのような解決策、ヒント、注意点などが考えられるか教えてください。試作したコードは下記のようなものでコマンドボタンでXMLファイルを指定してXXXcallを呼び出しています。初めてのことなので宜しくお願いします。(動くとpcに'OK'と返ってきます)
function XXX(AFile: PChar):PChar; stdcall; external 'XXXM.dll';
procedure XXXcall;
var
s,d:string;
pc:pchar;
begin
d:='';
s:=xmlfile;
AFile:=PChar(s);
pc:=XXX(afile);
d:=string(pc);
form1.memo1.Text:=d;
end;
Delphi 6はString型がShift_JIS(Windows的にはANSI)なのに対して、Delphi 2009およびそれ以降のバージョン(XE3も含まれます)ではUnicode(UTF-16LE)に変更されています。
文字列および文字列へのポインタをAnsiString、PAnsiCharにすればとりあえず動くと思います。
通りすがり様 解決しました。
文字関連の知識のないままご指摘の文字の「型」をあれこれ試しながらの結果
var s,d:string を var s,d:ansistring; にしただけでDLLが仕事をしてくれました。これでネックとなっていた箇所が解決して一挙に開発が進みます。 ありがとうございました。
ツイート | ![]() |