VCで作成したDLLの戻り値が文字列の場合

解決


ケント  2010-09-04 01:57:31  No: 39091

VCで作成したDLLの戻り値が文字列の場合、そのDLLを呼び出すDelphi側は
function  Test: String; cdecl external Test.dll'; 
で合っていますか?
Dllに「Test」が存在しませんと怒られます。

ちなみにVC側は下記のように定義しています。
LPTSTR Test(void){
}

よろしくお願いします。


monaa  2010-09-04 02:54:16  No: 39092

c++側でモジュール定義ファイルは作ってありますか?
**.def
//-------------------
LIBRARY  "AAA"
EXPORTS
  Test
//-------------------
**.cpp
LPTSTR Test(void){
  return TEXT("01234");
}
//-------------------

Delphi
function Test:PChar; stdcall; external 'AAA.dll';
procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessage(Test);
end;

異なる開発環境で文字列の扱いは注意が必要です。
ていうか、普通はもう少し厳密な定義をすると思います。
今回の例はVC2009(UNICODE),Delphi2009(UNICODE)でたまたま環境が合ってるだけです。


oni  2010-09-06 18:24:25  No: 39093

String で受けるとVC側で確保したメモリをDelphiで解放することにならないのかな?


ケント  2010-09-06 19:31:01  No: 39094

ありがとうございます。
とりあえず、呼び出せない理由は大文字になってしまっている部分があることでした。

ちゃんと自分で確認せずに質問してすいませんでした。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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