使用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吗?
/*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声明是否必要?有些书说是,但没有它,我可以正确运行我的演示。