龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++生成dll和调用dll的方法实例

时间:2014-05-21 15:24来源:网络整理 作者:网络 点击:
分享到:
C++生成dll和调用dll的方法实例,需要的朋友可以参考一下

本人根据网络多个相关博客帖子原创

1)生成dll

建立两个文件 xxx.h , xxx.cpp

xxx.h内容如下:

#ifdef BUILD_XXX_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif

extern "C"{
EXPORT void example(void);
... ...
}

xxx.cpp内容如下:

#define BUILD_XXX_DLL
#include "xxx.h"

void example(void)
{
}
... ...

然后从DOS控制台进行编译(假设已经安装mingw并加入环境变量)
g++ -shared -Wl,--kill-at,--output-def,xxx.def -o xxx.dll xxx.cpp

(因为C++通过修饰函数名来实现函数重载,所以我们要用extern "C"配合--kill-at编译选项来避免对函数名的修正,BUILD_XXX_DLL宏的作用是用来选择函数原型声明的作用)

2)静态调用dll

在新文件yyy.cpp里加入如下内容;
#include "xxx.h"
#pragma comment(lib,"xxx.dll")

生成的dll不需要def文件和cpp文件也可以
不包含xxx.h的话,需要把h文件内的函数原型声明添加进yyy.cpp

编译时需要加入dll,类似这样:
g++ -L. -o yyy.exe yyy.cpp xxx.dll

3)动态调用dll

首先,你需要包含windows.h
#include <windows.h>

你还需要一个句柄保存装入的dll文件
HINSTANCE hDll=LoadLibrary("xxx.dll");

声明所需函数的对应函数指针类型
typedef void (*pfunc)(void);

获得指向函数的函数指针
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");

使用完毕后,要释放dll文件
FreeLibrary(hDll);

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接