显式加载DLL并使用 DLL 中的类(转)
来源:互联网 发布:慈溪行知职高招聘 编辑:程序博客网 时间:2024/05/16 04:59
首先需要强调,当使用某个类时一般目的有二:实例化成对象或者继承它产生新类。
对于前者,我们可以构造一个抽象类(java里的接口)来连接调用方和DLL。
抽象类:
// Interface.h 公共文件/////////////////////////////////////////////////#pragma once class Interface{public: virtual void ShowMsg() = 0; // 将调用方需要调用的成员函数声明成纯虚函数 virtual ~Interface(){};// 抽象类的虚析构函数}; // Interface.cpp 被调用方文件////////////////////////////////////////////////// 注意下面的代码并不是实现 Interface 类,而是因为联系紧密才写在这。#include "stdafx.h"#include "Test.h"#include "Interface.h" // 通过导出函数形式向调用方提供指向派生类对象的基类指针extern "C" __declspec(dllexport) Interface* Export(void){ return (Interface*)new Test();}
将真正要调用的类声明成抽象类 Interface 的派生类:
// Test.h 被调用方文件//////////////////////////////////////////// 类的声明#pragma once#include "Interface.h"class Test:public Interface{public: Test() virtual ~Test(); virtual void ShowMsg(void);private: CString s;}; // Test.cpp 被调用方文件////////////////////////////////////////// 类的实现#include"stdafx.h"#include"Test.h" Test::Test(){ s = "hello form dll";} Test::~Test(){ AfxMessageBox(_T("destructor"));} void Test::ShowMsg(){ AfxMessageBox(s);}
在调用方调用DLL时动态加载:
// 调用方文件 /////////////////////////////////////////////////////////#include "stdafx.h"#include "Interface.h" // 包含抽象类从而使用接口 // 在调用处添加如下代码 HINSTANCE hDll; hDll = LoadLibrary(_T("module1.dll"));// 加载DLL库文件,DLL名称和路径用自己的 if(hDll == NULL) { TRACE("/n/nload dll fail/n/n"); return; } typedef Interface*(*pExport)(void); // 定义指向导出函数的指针类型 pExport Get; Get = (pExport)GetProcAddress(hDll,"Export");// 将指针指向函数首地址 if(Get == NULL) { TRACE("/n/nload address fail/n/n"); return; } Interface *t = Get();// 调用导出函数获得抽象类指针 t->ShowMsg();// 通过该指针调用类成员函数 delete t; // 释放DLL中生成的对象 FreeLibrary(hDll); //释放库句柄
出处:http://blog.csdn.net/maxttyl/article/details/1537023
0 0
- (转)显式加载DLL并使用 DLL 中的类
- (转)显式加载DLL并使用 DLL 中的类
- [转] 显式加载DLL并使用 DLL 中的类
- 显式加载DLL并使用 DLL 中的类
- 显式加载DLL并使用 DLL 中的类
- 显式加载DLL并使用 DLL 中的类(转)
- 显式加载DLL并使用 DLL 中的类(原创)
- Windows/MFC中_显式加载DLL并使用 DLL 中的类(原创)
- c++显式加载dll并使用DLL的类
- c++显式加载dll并使用DLL的类
- c++显式加载dll并使用DLL的类
- 使用LoadLibrary动态加载DLL并使用其中的类
- QLibrary的使用 加载dll 使用dll中的导出方法
- 显式加载DLL
- 显式加载dll
- 使用Dll中的类
- 建立WIN32 DLL,并使用静态加载和动态加载
- dll导出类(隐式加载)
- Linux图形界面和命令行界面切换
- 【JAVA笔记】将字符串信息写入xml文件的方法
- Java堆和栈的区别
- Android完美退出程序
- 连载:面向对象葵花宝典:思想、技巧与实践(4) - 面向对象是瑞士军刀还是一把锤子?
- 显式加载DLL并使用 DLL 中的类(转)
- wamp多站点配置
- php出现 Notice: Undefined index: name 的解决方法
- 驱动编写技巧说明
- linux cp命令源码
- 关于椭圆轨迹的一个设计 cocos2dx
- QT模态对话框及非模态对话框
- jQuery - 设置内容和属性
- 如何读取CSV文件到DataTable中,然后存到数据库