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