VC60中,创建调用 dll.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC60中,创建调用 dll

[ 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。 动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容动态链接库(Dynamic Link Library或者Dynamic-link library,缩写为DLL),是微软公司在微软视窗操作系统(即Windows操作系统)中实现共享函数库概念的一种方式。这些库函数的扩展名是.DLL、.OCX(包含ActiveX控制的库)或者.DRV(旧式的系统驱动程序)。 动态链接库缩写为DLL,在电脑中可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您有一个大型网络游戏,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,日后的修改工作将会十分费时,而如果把不同功能的代码分别放在数个动态链接库(DLL)中,您无需重新生成或安装整个程序就可以应用更新。1.使用 VC6.0 生成 DLL 新建项目 “Win32 Dynamic-Link Library”,输入项目名称,确定后选择 “A simple DLL project” 点击“完成”。 以下为cpp文件自动生成的代码: #include stdafx.h BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } 编辑cpp文件: 在#include stdafx.h的下一行加入 extern C __declspec(dllexport) int fun(int a, int b); /* 这是C格式导出函数; 这种写法一般用在C++写的DLL中,指按C的规则导出这个函数,否则导出的函数会很怪; 加上 extern C 表示按标准C格式导出函数.如果去掉仅兼容C++; 其中 int fun(int a, int b) 这部分代码是我们想用 dll 实现的函数原型声明 如果还想加入其他的可以继续加入 extern C __declspec(dllexport) int fun1(int a, int b); */ DllMain 是 DLL 的默认入口函数,类似于C语言的main函数,该例子无需修改此处,在 DllMain 的后面加入: int fun(int a,int b) { return a+b; } 这就是我们想用 DLL 实现的函数的定义,build 之后就会在 debug 目录下生成我们想要的 dll 文件 2.调用 DLL 新建一个 Win32 Console Application 工程,把刚才生成的 dll 文件拷贝到工程的根目录下 在 stdafx.h 文件中加入:#include windows.h 编辑cpp文件: #include stdafx.h typedef int (*PFUN)(int,int); void main() { HMODULE hModule = ::LoadLibrary(dlltest.dll); PFUN newfun = (PFUN)::GetProcAddress(hModule,fun); int i = newfun(1,2); printf(The result is %d\n,i); ::FreeLibrary(hModule); } 然后,运行就可以看到结果了 转VC6.0下调用Dll文件提供的函数接口和全局变量 函数接口: 首先把生成的Dll文件(如RegularDll.dll和RegularDll.lib)拷贝到当前工程所在文件夹,调用有两种方法: 1)动态方法: 使用LoadLibrary和GetProcAddress等函数,例 typedef void (*lpFun)(void); HINSTANCE hDll; hDll = LoadLibrary(RegularDll.dll); if (NULL==hDll) { MessageBox(Dll load failed!); } lpFun pShowDlg = (lpFun)GetProcAddress(hDll,ShowDlg); if (NULL == pShowDlg

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档