目录:
前言. 欢迎指正追加
实例一 动态库的制作及使用的一般方法 ---入门级 张永辉 2011.11
1) 创建DLL文件
2)查看DLL文件及制作lib文件
3)动态连接库的调用:
实例二
实例1:
//环境Visual Studio 2005
1)创建及查看DLL1.dll文件
1.在VS2005下创建项目或新建项目
2.在Visaul C++ 选择win32 选择 WIN32控制台应用程序
3.输入名称:NEW_DLL_example1 ,路径自选。
4.应用程序类型:选择DLL(D) , 附加选项:空项目。完成。
5.添加dll1s.cpp dll1s.h文件到路径……\NEW_DLL_example1\NEW_DLL_example1。
其内容如下:将其加入到工程
//------------dll1s.h-----------------
#include <iostream>
#define DLL1S_API_declspec(dllexport) //解决在不同语言调用下的名字匹配问题
DLL1S_API int add(int a,intb); //实现两个整数相加
DLL1S_API int sub(int a,intb); //实现两个整数相减
//------------dll1s.cpp---------------
#include "dll1s.h"
DLL1S_API int add(int a,intb) //实现两个整数相加
{ return a+b; }
DLL1S_API int sub (int a,intb) //实现两个整数相减
{ return a-b; }
6.编译以后在Debug文件下生成一个NEW_DLL_example1.dll的动态链接库文件。
2)查看DLL文件及制作lib文件
1. 在DOS下打开此文件目录
2. 并把你安装VS2005的目录下(x:\Microsoft Visual Studio 8\VC\bin)找到vcvars32.bat此文件,把它托放在你的DOS对话框里面,单击回车
3. 运行 dumpbin -exports NEW_DLL_example1.dll就可以查到你生成的DLL里面所包含的所实现的两个函数的具体信息:
4. 现在再打开你的Debug文件你会发现里面多出来一个NEW_DLL_example1.lib文件,dumpbin -exports就实现的了函数的导出。
5. 使用Depends工具打开NEW_DLL_example1.dll也可以看到dll文件内的内容。
3)动态连接库的调用:
1. 在VS2005下创建项目或新建项目
2. 在Visaul C++ 选择win32 选择 WIN32控制台应用程序
3. 安默认会添加预编译头,完成。
4. 刚才生成的NEW_DLL_example1.lib和NEW_DLL_example1.dll文件拷到【…\NEW_CALL_example1\NEW_CALL_example1】此工程目录下
5. 自动生成NEW_CALL_example1.cpp,并修改如下
//-----------------------NEW_CALL_example1.cpp-------------------------
#include"stdafx.h"
#include"dll1m.h"
int_tmain(int argc, _TCHAR* argv[])
{
inta = 34;
int b = 23;
printf(" a + b = %d \n" , add(a,b));
printf(" a - b = %d \n" , sub(a,b));
getchar();
return 0;
}
//--------------- dll1m.h---------------------------
#include<iostream>
#pragmacomment(lib,"NEW_DLL_example1.lib")
#define DLL1M_API _declspec(dllexport) //解决在不同语言调用下的名字匹配问题
DLL1M_APIint add(inta,int b); //实现两个整数相加
DLL1M_APIint sub (inta,int b); //实现两个整数相减
实战经验:为了其它语言能够调用,需要做如下改动:
dll1s.h #define DLL1S_API _declspec(dllexport) 改为 #define DLL1S_API extern "C" _declspec(dllexport)
dll1m.h #define DLL1M_API _declspec(dllexport) 改为 #define DLL1M_API extern "C" _declspec(dllexport)
使用extern "C"的缺陷是不能导出C++的类成员函数,只能 导出全局函数。使名字不发生改变。