使用_declspec(dllexport)导出函数

1.启功vc2015,新建一个win32项目,项目名为Test。

使用_declspec(dllexport)导出函数_第1张图片

2.在 windows桌面项目对话框上,选择应用程序类型“动态链接库(.dll)”在“其他选项”选择“空项目”

3.切换到解决方案视图,右击“头文件”,添加->新建项,选择头文件,改名称为Test.h单击添加。

4.切换到解决方案视图,右击“源文件”,添加->新建项,选择C++文件,改名为Test.cpp,单击添加。

打开Test.h写入

#ifndef _TEST_H
#define _TEST_H //防止重复引用

#ifdef __cplusplus
extern "C" {
#endif

_declspec(dllexport) void f();//声明函数f()为导出函数

#ifdef __cplusplus
}
#endif

#endif 

打开Test.cpp写入

#include "Test.h"
#include "windows.h" //为了使用MessageBox
#include "tchar.h" //为了使用_T

void f() {
	MessageBox(0 , _T("你好,世界"), 0, 0);
}

__cplusplus是cpp中的自定义宏,表示这是一段cpp代码。也就是说,上面一段代码的含义是:如果这是一段cpp代码,那么加入extern“C”{和}处里其中的代码。要明白为何使用extern"C",还得从cpp中对函数的重载处理开始说起。在C++中,为了支持重载机制,在编译生成的汇编代码中要对函数的名字进行一些处理,加入函数的返回类型等。在C中,只是简单的函数名字而已,不会加入其他的信息。也就是说,C++和C对产生的函数名字的处理是不一样的。

这里的exturn“C”必须又,否则Qt项目引用函数建辉出错,会提示函数找不到的错误码("DWORD dw = ::GetLastError();",得到dw=127)。

5.保存项目并生成解决方案,可以在解决方案目录下的Debug目录下发生生成的Test.dll,并且导入库文件Test.lib也在同一路径下。

使用_declspec(dllexport)导出函数_第2张图片

 

你可能感兴趣的:(dll,c++)