みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

【メモ】DLLからインポートライブラリを作る

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

【メモ】DLLからインポートライブラリを作る

投稿記事 by みけCAT » 13年前

C言語でDLLを使うときは、ActiveBasicやHSPとは違って、
インポートライブラリが必要…ではないですが、あると楽です。
C言語やC++で、自分でDLLを作るときは、コンパイラが勝手にインポートライブラリも作ってくれます。
しかし、普通に配布されているDLL、例えば
http://www.every-little.com/software/
で配布しているDLLには、インポートライブラリなどという高級なものはついていません。
ActiveBasicでDLLを作る場合も、インポートライブラリは作られません。
そこで、DLLからインポートライブラリを作れたら便利だろうと思いました。
その方法を掲示板で質問しようと思い、まず自分で調べてみたら、しっかり見つかりました。
~ここから本題~
その方法とは、
http://skeishi.web.fc2.com/dev-cpp/tips/dll_import.html
これです。
とだけ書いておくと手抜きと思われそうなので、やり方をここにも書いておきます。
DLLの名前をhoge.dllとすると、

CODE:

pexports hoge.dll >fuga.def
dlltool --dllname hoge.dll --input-def fuga.def --output-lib libhoge.a
というコマンドでインポートライブラリが作れます。
詳しくはURL先で。
※試してみたところ、--dll-nameではなく--dllnameオプションでした。
GNU dlltool 2.13.90 20030111

試しにMD5.dll
http://www.every-little.com/software/dll/md5.xhtml
のインポートライブラリを作成し、使用してみました。
ヘッダファイルはReadMeなどを参考に、自分でつくらないといけません。
普通のDLLと同じように、
頭に__declspec (dllimport)を付けて関数宣言を書けば、ほとんどのDLLが使えると思います。[要出典]
~ここから手順~
1.フォルダを用意し、以下のファイルを入れます。
以下の説明ではH:\C\hira_md5_testフォルダに入れています。
・MD5.dll(ダウンロードしたアーカイブを解凍してコピー)
・MD5.h

CODE:

#ifndef MD5_H
#define MD5_H

__declspec (dllimport) void GetMD5(void* Buf,long Size,char* MD5);
__declspec (dllimport) void PrintMD5(char* MD5,char* HexDec);

#endif
・MD5test.c

CODE:

#include 
#include "MD5.h"

int main(void) {
	char input_buffer[]={
		0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
		0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,
		0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
		0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF
	};
	int buffer_size;
	char MD5[16];
	char MD5_str[100]={0};
	FILE* fp;
	/*バッファのサイズを求める*/
	buffer_size=sizeof(input_buffer)/sizeof(input_buffer[0]);
	/*外部でMD5を求められるようにバッファを出力*/
	fp=fopen("buffer.bin","wb");
	if(fp!=NULL) {
		fwrite(input_buffer,1,buffer_size,fp);
		fclose(fp);
	}
	/*MD5をDLLを使用して求める*/
	GetMD5(input_buffer,buffer_size,MD5);
	PrintMD5(MD5,MD5_str);
	/*MD5を出力*/
	puts(MD5_str);
	/*終了*/
	return 0;
}
2.インポートライブラリを作ります。

CODE:

H:\C\hira_md5_test>pexports MD5.dll > MD5.def
H:\C\hira_md5_test>dlltool --dllname MD5.dll --input-def MD5.def --output-lib libMD5.a
これでフォルダ内にMD5.defとlibMD5.aができるはずです。

3.インポートライブラリを使ってコンパイルし、実行してみます。

CODE:

H:\C\hira_md5_test>gcc -o MD5test.exe MD5test.c -L. -lMD5
H:\C\hira_md5_test>MD5test
正常にexeファイルが作られ、実行すると

CODE:

44A2503AB0CE0C48D4886BB856E8247F
と表示されれば成功です。

この日記が誰かの参考になれば幸いです。

コメントはまだありません。