Delphi6で動いていたDLL起動ソフトをWE3に移植

解決


kazu  2019-03-11 17:47:48  No: 49721

(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;


通りすがり  2019-03-11 18:02:27  No: 49722

Delphi 6はString型がShift_JIS(Windows的にはANSI)なのに対して、Delphi 2009およびそれ以降のバージョン(XE3も含まれます)ではUnicode(UTF-16LE)に変更されています。
文字列および文字列へのポインタをAnsiString、PAnsiCharにすればとりあえず動くと思います。


kazu  2019-03-11 23:05:48  No: 49723

通りすがり様  解決しました。  
文字関連の知識のないままご指摘の文字の「型」をあれこれ試しながらの結果

var s,d:string を  var s,d:ansistring;  にしただけでDLLが仕事をしてくれました。これでネックとなっていた箇所が解決して一挙に開発が進みます。  ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加