(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が仕事をしてくれました。これでネックとなっていた箇所が解決して一挙に開発が進みます。  ありがとうございました。
| ツイート | 
        
         |