栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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();
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954637.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号