0

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

4

0 回答 0