(5)在DLL中使用DuiLib

来源:互联网 发布:禁毒网络知识竞赛答案 编辑:程序博客网 时间:2024/05/01 07:18

转载自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

  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的消息循环。

0 0