打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
dll导出类比较好的方式

看了篇好文,dll导出类的,之前已经胡乱写,以后可以参考这个规范

前言/引用



这种方式是比较合适的,跟com类似。结构是这样的:
导出类是一个派生类,派生自一个抽象类——都是纯虚函数。使用者需要知道这个抽象类的结构。DLL最少只需要提供一个用于获取类对象指针的接口。使用者跟DLL提供者共用一个抽象类的头文件,使用者依赖于DLL的东西很少,只需要知道抽象类的接口,以及获取对象指针的导出函数,对象内存空间的申请是在DLL模块中做的,释放也在DLL模块中完成,最后记得要调用释放对象的函数。
这种方式比较好,通用,产生的DLL没有特定环境限制。借助了C++类的虚函数。一般都是采用这种方式。除了对DLL导出类有好处外,采用接口跟实现分离,可以使得工程的结构更清晰,使用者只需要知道接口,而不需要知道实现。

DLL代码

导出的头文件(外部exe包含的接口头文件)

//dll导出类//dll跟其使用者共用的头文件#pragma  once#ifdef MATUREAPPROACH_EXPORTS#define MATUREAPPROACH_API __declspec(dllexport)#else#define MATUREAPPROACH_API __declspec(dllimport)#endifclass IExport{public:    virtual void Hi() = 0;    virtual void Test() = 0;    virtual void Release() = 0;};extern "C" MATUREAPPROACH_API IExport* _stdcall CreateExportObj();extern "C" MATUREAPPROACH_API void _stdcall DestroyExportObj(IExport* pExport);

继承自导出类实现类,头文件

//dll导出类// 实现类#pragma once#include "MatureApproach.h"class ExportImpl : public IExport{public:    virtual void Hi();    virtual void Test();    virtual void Release();    ~ExportImpl();private:};

继承自导出类实现类,cpp文件

#include "stdafx.h"#include "ExportClassImpl.h"void ExportImpl::Hi(){	wcout << L"Hello World" << endl;}void ExportImpl::Test(){	wcout << L"Hi cswuyg" << endl;}void ExportImpl::Release(){	delete this;}ExportImpl::~ExportImpl(){	cout << "Release OK" << endl;}

使用

exe调用

#include "stdafx.h"#include "MatureApproach.h"#pragma comment(lib, "../debug/MatureApproach.lib")int _tmain(int argc, _TCHAR* argv[]){	IExport* pExport = CreateExportObj();	pExport->Hi();	pExport->Test();	DestroyExportObj(pExport);	system("pause");	return 0;}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
编写DLL所学所思(2)
c++生成dll
显式加载DLL并使用 DLL 中的类(原创)
关机显示*.exe-DLL初始化失败
VS中Release模式下生成去掉生成pdb文件
VB调用小宇仿易语言超级DLL(DLL由小宇编写)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服