C++动态加载(显式链接)使用类接口

C++动态加载(显式链接)使用类接口

使用windows下的工程 ,动态加载DLL(显示链接),灵活性更好,相比隐式链接,无需在工程设置.lib

示例:

代码片 dll 中的 getestui.h. 自己在VS中设置会生成的dll叫 getest.dll

// 需要使用虚基表的方法,才能动态加载时,使用类的接口

# ifdef BUILD_GAMEECOLOGY_DLL
#   define GAMEECOLOGY_EXPORT __declspec(dllexport)
# else
#  define GAMEECOLOGY_EXPORT __declspec(dllimport)
# endif // BUILD_GAMEECOLOGY_DLL

class GeTestUI 
{
public:
	GeTestUI();

	virtual void creatMessage();//注意要用虚函数

	virtual void deleteSelf();//注意要用虚函数
};

extern "C" GAMEECOLOGY_EXPORT GeTestUI *createGeTestUiObject();//对外提供构造函数

代码片 dll 中的 getestui.cpp

#include "getestui.h"

GeTestUI::GeTestUI()
{

}

void GeTestUI::creatMessage()
{
	//QMessageBox::warning(0, "hello", "Test Now!!"); 写一些代码
}

void GeTestUI::deleteSelf(void)
{
	delete this;
}

GeTestUI *createGeTestUiObject()
{
	return new GeTestUI();
}

外部工程的main.cpp使用动态加载.

// 
	typedef GeTestUI* (CREATEFN)(void);
	HMODULE  hModule = LoadLibraryEx(L"getest.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
	CREATEFN* pfn;
	pfn=(CREATEFN *)::GetProcAddress(hModule,"createGeTestUiObject");
	GeTestUI *testUi = pfn();
	testUi->creatMessage();//这里就是要使用 virtual ,虚基表的机制,不然会编译出错
	testUi->deleteSelf();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值