MSVC (Microsoft Visual C++) を使用して dll を作成する場合、他のユーザーが使用するはずの名前を明示的にエクスポートする必要があります。
ファイルで使用した名前を明示的にインポートする必要がありますか?
例:
/*Math.c will be compiled to a dll*/
__declspec(dllexport) double Sub( double a, double b )
{
return a - b;
}
Math.c を dll にコンパイルします。
cl /LDd Math.c
これにより、4 つのファイル Math.dll Math.obj Math.lib Math.exp が生成されます。
プログラムで Sub() を使用したいのですが、このように Sub を IMPORT する必要がありますか??
/*TestMath.c*/
#include <stdio.h>
__declspec(dllimport) double Sub( double a, double b );
//or can I just ignore the __declspec(dllimport) ?
//I can compile TestMath.c to TestMath.exe without it in Win7 MSVC 2010
//but some books mentioned that you should EXPLICT IMPORT this name like above
int main()
{
double result = Sub ( 3.0, 2.0 );
printf( "Result = %f\n", result);
return 0;
}
Math.lib を使って TestMath.exe にコンパイルします。
cl /c TestMath.c //TestMath.c->TestMath.obj
link TestMath.obj Math.lib // TestMath.obj->TestMath.exe
__decclspec(dllexport) またはエクスポート名を明示的に宣言するいくつかの .def ファイルが必要です。エクスポート宣言がない場合、TestMath.exe はエラーを実行します。
私の質問は: IMPORT 申告は必要ですか? 一部の本では「はい」と書かれていますが、それがなくても、デモを正しく実行できます。