轉載自DuiLib中文網 http://www.duilibcn.com/duicreator/98.html
想在DLL中使用DuiLib?好吧,用DuiCreator的DuiLib DLL來快速開始吧。
用DuiCreator新建一個工程,工程類別選擇DUiLib DLL。
然後點擊下一步,完成即可。然後點擊編譯按鈕,使用DuiLib的DLL就製作好了。。
來看一下工程做了什麼吧。
cmainwindow.h,cmainwindow.cpp,cmainwindow.xml和以前的工程一樣,分別是頭文件,源文件和窗體文件。
app.rc是DLL的工程版本。
重點是main.cpp
-
#define WIN32_LEAN_AND_MEAN
-
#define _CRT_SECURE_NO_SEPRECATE
-
-
#include "cmainwindow.h"
-
-
#define EXPORT_API __declspec(dllexport)
-
-
extern "C" void EXPORT_API ShowDuiWindow()
-
{
-
CPaintManagerUI::SetInstance(NULL);
-
-
WCHAR sExeDir[500];
-
memset(sExeDir,0,sizeof(WCHAR)*500);
-
::GetCurrentDirectoryW(500,sExeDir);
-
CPaintManagerUI::SetResourcePath(sExeDir);
-
-
CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");
-
-
pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
-
pFrame->CenterWindow();
-
pFrame->ShowWindow();
-
CPaintManagerUI::MessageLoop();
-
}
-
-
BOOL APIENTRY DllMain( HANDLE hModule,
-
DWORD ul_reason_for_call,
-
LPVOID lpReserved
-
)
-
{
-
switch (ul_reason_for_call)
-
{
-
case DLL_PROCESS_ATTACH:
-
{
-
break;
-
}
-
case DLL_THREAD_ATTACH:
-
case DLL_THREAD_DETACH:
-
case DLL_PROCESS_DETACH:
-
break;
-
}
-
return TRUE;
-
}
-
複製代碼
首先包含了窗體類的頭文件#include "cmainwindow.h"#define EXPORT_API __declspec(dllexport) 定義導出宏extern "C" void EXPORT_API ShowDuiWindow() 定義導出函數爲ShowDuiWindow()
-
CPaintManagerUI::SetInstance(NULL);
複製代碼
因爲沒有WinMain函數了,這裏設置爲NULL
-
CPaintManagerUI::SetResourcePath(sExeDir);
複製代碼
這裏設置一下圖片和XML資源路徑
-
CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");
複製代碼
圖片和XML文件在加載它的EXE的skin文件夾下。
-
pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
-
pFrame->CenterWindow();
-
pFrame->ShowWindow();
-
CPaintManagerUI::MessageLoop();
複製代碼
創建窗體上級爲NULL,當前也可以爲它設置一個Parent。
-
CPaintManagerUI::MessageLoop();
複製代碼
開始DuiLib的消息循環。