天天看点

(5)在DLL中使用DuiLib

转载自DuiLib中文网 http://www.duilibcn.com/duicreator/98.html

想在DLL中使用DuiLib?好吧,用DuiCreator的DuiLib DLL来快速开始吧。

用DuiCreator新建一个工程,工程类别选择DUiLib DLL。

(5)在DLL中使用DuiLib

然后点击下一步,完成即可。然后点击编译按钮,使用DuiLib的DLL就制作好了。。

来看一下工程做了什么吧。

cmainwindow.h,cmainwindow.cpp,cmainwindow.xml和以前的工程一样,分别是头文件,源文件和窗体文件。

app.rc是DLL的工程版本。

重点是main.cpp

  1. #define WIN32_LEAN_AND_MEAN
  2. #define _CRT_SECURE_NO_SEPRECATE
  3. #include "cmainwindow.h"
  4. #define EXPORT_API __declspec(dllexport)
  5. extern "C" void EXPORT_API ShowDuiWindow()
  6. {
  7.     CPaintManagerUI::SetInstance(NULL);
  8.     WCHAR sExeDir[500];
  9.     memset(sExeDir,0,sizeof(WCHAR)*500);
  10.     ::GetCurrentDirectoryW(500,sExeDir);
  11.     CPaintManagerUI::SetResourcePath(sExeDir);
  12.     CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");
  13.     pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
  14.     pFrame->CenterWindow();
  15.     pFrame->ShowWindow();
  16.     CPaintManagerUI::MessageLoop();
  17. }
  18. BOOL APIENTRY DllMain( HANDLE hModule,
  19.                        DWORD  ul_reason_for_call,
  20.                        LPVOID lpReserved
  21.                        )
  22. {
  23.     switch (ul_reason_for_call)
  24.     {
  25.     case DLL_PROCESS_ATTACH:
  26.     {
  27.         break;
  28.     }
  29.     case DLL_THREAD_ATTACH:
  30.     case DLL_THREAD_DETACH:
  31.     case DLL_PROCESS_DETACH:
  32.         break;
  33.     }
  34.     return TRUE;
  35. }

复制代码 首先包含了窗体类的头文件#include "cmainwindow.h"

#define EXPORT_API __declspec(dllexport) 定义导出宏

extern "C" void EXPORT_API ShowDuiWindow() 定义导出函数为ShowDuiWindow()

  1. CPaintManagerUI::SetInstance(NULL);

复制代码 因为没有WinMain函数了,这里设置为NULL

  1. CPaintManagerUI::SetResourcePath(sExeDir);

复制代码 这里设置一下图片和XML资源路径

  1. CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");

复制代码 图片和XML文件在加载它的EXE的skin文件夹下。

  1. pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
  2. pFrame->CenterWindow();
  3. pFrame->ShowWindow();
  4. CPaintManagerUI::MessageLoop();

复制代码 创建窗体上级为NULL,当前也可以为它设置一个Parent。

  1. CPaintManagerUI::MessageLoop();

复制代码 开始DuiLib的消息循环。