VCで作成したDLLの戻り値が文字列の場合、そのDLLを呼び出すDelphi側は
function Test: String; cdecl external Test.dll';
で合っていますか?
Dllに「Test」が存在しませんと怒られます。
ちなみにVC側は下記のように定義しています。
LPTSTR Test(void){
}
よろしくお願いします。
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)でたまたま環境が合ってるだけです。
String で受けるとVC側で確保したメモリをDelphiで解放することにならないのかな?
ありがとうございます。
とりあえず、呼び出せない理由は大文字になってしまっている部分があることでした。
ちゃんと自分で確認せずに質問してすいませんでした。
ツイート | ![]() |