C++生成DLL导出函数的小demo
2016-04-06 21:18
393 查看
一、创建DLL
1.生成DLL文件,导出函数,一般有两种方法,一种是在函数声明前面加上__declspec(dllexport),另一种是用def文件来动态导出函数。这篇写一个用def导出函数的小demo。
2.创建makedll文件。
(1).makedll.h
makedll.cpp
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
运行搞定。
一、创建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) #endif extern "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; }
运行搞定。
相关文章推荐
- 一个简单的C语言的汇编程序
- C++走向远洋——32(项目一内全部成员函数)
- C语言问卷
- C++走向远洋——31(六周,项目一,1.1)
- 基于C++11的事件驱动框架
- c++primer(第五版) 第十四章 重载运算与类型转换习题答案
- C++走向远洋——30(六周,项目一1.0)
- power(x,n)
- C语言问卷调查
- C语言学习008:标准错误
- C语言的知识与能力的自评
- C++模板计数排序
- 如何用命令行编译c++程序
- C语言中的strlen与sizeof的区别
- c++ primer 第五版 Screen类(包含Window_mgr类)
- C++复习要点总结十一——多态(二)
- VS2010 C++读写.mat格式文件
- 状态模式(state)C++实现
- C++中的异常浅析
- 【C++】多文件程序结构