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);

时间: 2024-10-07 09:10:33

C++ 生成 dll 和调用 dll 的方法实例(转)的相关文章

c的cl 编译dll,C#调用dll

extern "C" int _declspec(dllexport)testunity(); extern "C" int _declspec(dllexport)addT(int a,int b); int testunity() { return 3;/*这是函数,里面可以写你想要实现的任何功能 */} int addT(int a,int b){return a*2+b*3;} set PATH=C:\Program Files (x86)\Microsof

C++编写 动态链接库dll 和 调用dll

参考:https://jingyan.baidu.com/article/ff42efa92c49cfc19e2202fd.html 和htps://jingyan.baidu.com/article/ff411625c7e60812e48237d5.html 和https://blog.csdn.net/baidu_30174103/article/details/80514925 1.首先遇到了VS2015一新建项目就出现未将对象引用设置到对象的实例的问题,参考:https://www.zh

java中调用dll文件的两种方法

一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNative地址:http://www.jb51.net/article/35232.htm JNA方法: 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架

WIN7+VS2010 制作与调用DLL

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 嗯哼~之前帮老师做的那个模块,不用做了=  =. 做了近十天,结果跑了13分钟 人家,秒级别的,甚至毫秒级的速度.... 哎.... 跪拜ING,2000+ X 2000+阶矩阵,有乘法,点乘,转置,求逆,一系列操作, 而且,乘法至少要进行40+次,求逆也要进行

C#程序实现动态调用DLL的研究(转)

摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也有相似的VB程序,但在某一技术论坛上提起这种设计方法时,有网友提出:“这种方法好是好,但就是启动

C#程序实现动态调用DLL的研究

原文:C#程序实现动态调用DLL的研究 摘  要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决"DLL Hell"提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也有相似的VB程序,但在某一技术论坛

C#程序实现动态调用DLL的研究[转]

摘   要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“ DLL Hell ”提供了一种解决方案.这是一个很好的设计思想,而且该作者也用 C++ 实现了,在 Internet 上也有相似的 VB 程序,但在某一技术论坛上提起这种设计方法时

delphi编写与调用DLL(delphi7下测试通过)

http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html 1 delphi编写DLL 2 下面在delphi中编写一个简单的dll,在该dll中只有一个max函数,返回2个数中的大数(Delphi 5.0) 3 1.New->DLL;取名为DLL_0001,编写代码: 4 library dll_0001; 5 uses 6 SysUtils, 7 Classes; 8 {$R *.RES} 9 function max(x,y:integer):

C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll C#调用、动态调用

1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图所示, 也可以在本地IIS根据webservice文件目录新发布一个webservice,然后程序动态调用,修改Url public new string Url { set; get; } 2.根据wsdl文件生成webservice 的.cs文件 及 生成dll C#调用   有时没有这么多文件