使用dll中导出的函数

时间:2013-01-25 02:19:45

标签: c dll

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

0 个答案:

没有答案