DLL导出一个c++类,接口方法
2022/5/12 9:47:25
本文主要是介绍DLL导出一个c++类,接口方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Mature Approach(用抽象c++接口)
接口类:
MatureApproach.h
#pragma once #ifdef MATUREAPPROACH_EXPORTS #define MATUREAPPROACH_API __declspec(dllexport) #else #define MATUREAPPROACH_API __declspec(dllimport) #endif class 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);
MatureApproach.cpp
// MatureApproach.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" #include "MatureApproach.h" #include "ExportClassImpl.h" #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } #ifdef _MANAGED #pragma managed(pop) #endif MATUREAPPROACH_API IExport* APIENTRY CreateExportObj() { return new ExportImpl; } //这里不能直接delete pExport,因为没有把IExport的析构函数定义为虚函数 MATUREAPPROACH_API void APIENTRY DestroyExportObj(IExport* pExport) { pExport->Release(); }
实现类:
#pragma once #include "MatureApproach.h" class ExportImpl : public IExport { public: virtual void Hi(); virtual void Test(); virtual void Release(); ~ExportImpl(); private: };
cpp略
配置要点:
最后导出MatureApproach.h,MatureApproach.dll,MatureApproach.lib
调用:
配置
包含MatureApproach.h目录
添加MatureApproach.lib目录
指定MatureApproach.lib
代码调用:
#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; }
参考:
(40条消息) 【C++笔记 】如何从DLL中导出一个c++类_muyijames的博客-CSDN博客_c++ dll导出类
C++ DLL导出类 知识大全 - DoubleLi - 博客园 (cnblogs.com)
这篇关于DLL导出一个c++类,接口方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升