Delphiで作ったDLLを、C言語で利用するには?

解決


maco  2006-06-30 00:05:37  No: 22335

こんにちは

Delphiで開発したDLLを、Cで開発したプログラムで利用したいと思っています。

C(VC++)では、利用したいDLLのLIBファイルをプロジェクトに加えることで、
DLL内の関数を簡単に呼び出せるようになります。

しかし、DelphiにはLIBファイルを作成する方法が見当たりません。

どなたか、LIBファイルを作成する方法をご存知ではないですか?
また、LIBファイルを作れない場合、DelphiのDLLをCでどのように呼び出したらよいでしょうか?


ママん  2006-06-30 02:42:09  No: 22336

初挑戦してみました。
確かに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;
}


maco  2006-07-05 03:57:07  No: 22337

ママんさん、返信ありがとうございます。

教えていただいた方法とは異なりますが、以下の方法で
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


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

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






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