C 常规DLL应用方式介绍
创始人
2024-06-23 02:20:56
0次

C++中的DLL应用在实际编程中是非常重要的一个基础概念,掌握了这一应用对于我们程序开有着非常重要的作用。在这里我们将会针对C++常规DLL做一个详细介绍,希望能给大家带来一些帮助。

C++常规DLL的建立与使用

1:导出函数

  1. __declspec(dllexport) void ShowDlg(void)  
  2. {  
  3. CDllDialog dllDialog;  
  4. dllDialog.DoModal ();  
  5. } 

2:修改.def文件,加上函数名称

  1. ; DrawTestDll.def : Declares the module parameters for the DLL.  
  2.  
  3. LIBRARY "DrawTestDll"  
  4. DESCRIPTION 'DrawTestDll Windows Dynamic Link Library'  
  5.  
  6. EXPORTS  
  7. ; Explicit exports can go here 

3:将DLL文件复制到程序所在目录

4:在程序里调用DLL

  1. void CDllTestView::OnLButtonDown(UINT nFlags, CPoint point)  
  2. {  
  3. typedef void (*lpFun)(void);  
  4. HINSTANCE hDll; //DLL句柄  
  5. hDll = LoadLibrary("DrawTestDll.dll"); //加载DLL资源  
  6. if (NULL==hDll) //寻找顺序,EXE所在目录,工程所在目录,System、windows目录  
  7. {  
  8. MessageBox("DLL加载失败");  
  9. }  
  10. lpFun addFun; //函数指针  
  11. addFun = (lpFun)GetProcAddress(hDll,"ShowDlg"); //得到函数ShowDlg的地址  
  12. if (NULL==addFun)  
  13. {  
  14. MessageBox("DLL中函数寻找失败");  
  15. }  
  16. HINSTANCE exe_hinstance=AfxGetResourceHandle(); //得到主程序的实例句柄  
  17. AfxSetResourceHandle(hDll); //设置主程序的句柄为DLL实例(利用DLL里的资源)  
  18. addFun(); //调用函数  
  19. AfxSetResourceHandle(exe_hinstance);//重新设置主程序的实例句柄  
  20. FreeLibrary(hDll); //赦放DLL资源  
  21. } 

C++常规DLL中类的使用

1:DLL中添加新类

类的.h文件:
 

  1. //导出一个类(包括其方法、属性)  
  2. class _declspec(dllexport) CDllClass {  
  3. public:  
  4. CDllClass(void);  
  5. void MSG(const char * const str);  
  6. }; 

类的.cpp文件:

  1. #include "stdafx.h"  
  2. #include "DllClass.h"  
  3.  
  4. CDllClass::CDllClass()  
  5. {  
  6. return;  
  7. }  
  8. void CDllClass::MSG(const char * const str)  
  9. {  
  10. MessageBox(NULL,str,"",MB_OK);  
  11. } 

2:将编译好的DLL文件、Lib文件和类的头文件复制到工程目录

3:修改类的头文件(将dll的头文件中为 dllexport,在应用文件中为dllimport)

  1. //导入一个类(包括其方法、属性)  
  2. class _declspec(dllimport) CDllClass {  
  3. public:  
  4. CDllClass(void);  
  5. void MSG(const char * const str);  
  6. }; 

4:在调用类的实现函数的文件里加上类的头文件和Lib文件的引用

  1. #include "DllClass.h" //头文件的引入,是程序可以定义类的对象  
  2. #pragma comment(lib,"DrawDll.lib") //具体函数的定义 

正常使用即可。以上就是对C++常规DLL的相关介绍。

【编辑推荐】

  1. C++冒泡排序基本应用技巧分享
  2. C++ Vector用法深入剖析
  3. C++集合初始化基本概念概述
  4. 删除C++容器值相关技巧讲解
  5. C++ Builder操作Excel表实现技巧讲解

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...