インポートライブラリが必要…ではないですが、あると楽です。
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とすると、
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
#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
#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;
}
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
3.インポートライブラリを使ってコンパイルし、実行してみます。 正常にexeファイルが作られ、実行すると と表示されれば成功です。
この日記が誰かの参考になれば幸いです。