使用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();



