こんにちは
Delphiで開発したDLLを、Cで開発したプログラムで利用したいと思っています。
C(VC++)では、利用したいDLLのLIBファイルをプロジェクトに加えることで、
DLL内の関数を簡単に呼び出せるようになります。
しかし、DelphiにはLIBファイルを作成する方法が見当たりません。
どなたか、LIBファイルを作成する方法をご存知ではないですか?
また、LIBファイルを作れない場合、DelphiのDLLをCでどのように呼び出したらよいでしょうか?
初挑戦してみました。
確かにLIBファイルが作成できないのは痛いですね。
でもCでDll,Delphiで利用の方が多いかと思います。
Delphi Dll(Delphi7)
http://oto.chu.jp/kujira/text/delphi/dll.htm
library Project1;
uses
Windows;
{$R *.res}
function MsgYesNo(Text: PChar; Title: PChar): BOOL; stdcall;
begin
Result := (MessageBox(0, Text, Title, MB_YESNO or MB_ICONQUESTION) = IDYES);
end;
exports
MsgYesNo;
begin
end.
c exe (Microsoft Visual C++ .NET)
http://hp.vector.co.jp/authors/VA019517/howtodll.html
#include "stdafx.h"
#include <windows.h>
HINSTANCE hDll;
LONG ( __stdcall *MsgYesNo)(PCHAR,PCHAR);
int _tmain(int argc, _TCHAR* argv[])
{
printf("hello");
hDll = ::LoadLibraryEx("project1.dll",NULL,0);
if( ! hDll ){
return 0;
}
MsgYesNo = (LONG(__stdcall*)(PCHAR ,PCHAR)) ::GetProcAddress( hDll,"MsgYesNo");
if( ! MsgYesNo ){
::FreeLibrary( hDll );
return 0;
}
bool b = MsgYesNo("test","test");
::FreeLibrary( hDll );
return 0;
}
ママんさん、返信ありがとうございます。
教えていただいた方法とは異なりますが、以下の方法で
LIBファイル(インポートライブラリ)を作成できました。
【インポートライブラリの作成】
1.defファイルを用意
2.コマンドプロンプトで以下を実行
lib /def:"DEFファイル名" /out:"LIBファイル名"
また上記方法で作成したLIBファイルを使うことで、DLLに宣言された関数を利用できました。
━━━ Delphi7でのDLLソース ━━━
library MakeDll;
uses
SysUtils,Classes;
var
Input1,Input2: Integer;
{$R *.res}
procedure SetData(i1,i2 : Integer); cdecl;
begin
Input1 := i1;
Input2 := i2;
end;
function Calc: Integer; cdecl;
begin
Inc(Input1,Input2);
Result := Input1;
end;
exports
SetData,Calc;
begin
end.
━━━ VC++6でのソース ━━━
#include <stdio.h>
extern long Calc(void);
extern void SetData(long,long);
main()
{
SetData(100,10);
printf("Calc=%d\n",Calc());
}
━━━ defファイル内容 ━━━
LIBRARY MakeDLL
DESCRIPTION "DLLサンプル"
EXPORTS
SetData = SetData
Calc = Calc
=== VC++6での実行結果 ===
> Calc=110
ツイート | ![]() |