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導出類
浙公網安備 33010602011771號