C++生成DLL导出函数的小demo
来源:互联网 发布:官路淘宝txt无错下载 编辑:程序博客网 时间:2024/05/21 10:07
一、创建DLL
1.生成DLL文件,导出函数,一般有两种方法,一种是在函数声明前面加上__declspec(dllexport),另一种是用def文件来动态导出函数。这篇写一个用def导出函数的小demo。
2.创建makedll文件。
(1).makedll.h
#define MATHFUNCSDLL_EXPORTS#ifdef MATHFUNCSDLL_EXPORTS#define MATHFUNCSDLL_API __declspec(dllexport) #else#define MATHFUNCSDLL_API __declspec(dllimport) #endifextern "C" {MATHFUNCSDLL_API int multiply(int a, int b);MATHFUNCSDLL_API int add(int c, int d);}makedll.cpp
#include<makedll.h>extern "C"{MATHFUNCSDLL_API int multiply(int a, int b){return a*b;}MATHFUNCSDLL_API int add(int c, int d){return c + d;}}
3.然后在菜单栏选择“项目”——“添加新项”——vc++节点中的代码——模块定义文件(.def),输入def文件名,我输入的makedll.def确定。
makedll.def文件内容如下:
LIBRARY makedll
EXPORTS
multiply
add
LIBRARY 后面是要生成的DLL文件名,EXPORTS下面是要导出的函数的名字(只有名字)
4.生成解决方案。
二、使用DLL
1.新建项目usedll,来调用导出的函数。
2.将项目makedll生成的makedll.dll拷入usedll项目中,
3.main.cpp
#include<iostream>#include<Windows.h>using namespace std;typedef int(*ADD)(int a,int b);typedef int(*MULTIPLY)(int a, int b);int main(){HMODULE hm = ::LoadLibrary(TEXT("makedll.dll"));//如果Dll加载失败,释放它占用的资源if (hm == NULL){cout << "hm is null" << endl;::FreeLibrary(hm);return 0;}ADD add;MULTIPLY multiply;//取得目标Dll中导出函数的地址(提醒:函数名就是函数的入口地址) add = (ADD)::GetProcAddress(hm, "add");if (add == NULL){cout << "add is null" << endl;::FreeLibrary(hm);}multiply = (MULTIPLY)::GetProcAddress(hm, "multiply");cout << add(1,3) << endl;cout << multiply(2, 4) << endl;::FreeLibrary(hm);return 0;}运行搞定。
1 0
- C++生成DLL导出函数的小demo
- C++生成DLL导出函数的小demo
- 编程c++dll , DLL 的编写,导出函数 ,使用函数
- 让VB生成的DLL工程导出函数
- VC生成的dll中导出函数名三种方法
- 用C/C++做DLL函数的导出方法
- dll导出命名空间下的c风格函数陷阱
- 如何生成DLL文件并导出函数及如何在C++或C#中调用DLL中导出的函数
- 查看dll的导出函数
- DLL导出函数的研究
- DLL 的编写,导出函数
- DLL 的编写,导出函数
- 关于Dll函数的导出
- 导出dll的函数定义
- DLL 的编写,导出函数
- DLL 的编写,导出函数
- windows dll函数的导出
- DLL 的编写,导出函数 DLL 中.def和extern c的作用
- 文件不小心损坏了该如何恢复
- 三星Tizen,路漫漫其修远兮
- SQL INNER JOIN 关键字
- bash shell之数组使用2
- Linux下安装jdk1.6步骤以及相关的配置工作
- C++生成DLL导出函数的小demo
- [noj 1557] Team of Slime
- Android 双卡双待手机解析短信异常分析及解决
- SQL LEFT JOIN 关键字
- 三星Tizen,路漫漫其修远兮
- Update CocoaPods问题小记
- JS 将变量 转化为字符串的方法, 适用于所有类型,数组, 对象,函数和基本类型等
- android开源项目和框架
- 蓝牙的SDP协议总结