文章目录
- 1、原生DuiLib的编译和运行
- 1.1、下载并解压成这个样子
- 1.2、打开.sln解决方案文件
- 1.3、编译成功
- 2、网易DuiLib编译和运行
- 2.1、下载并解压成这个样子
- 2.2、打开.sln解决方案文件
- 2.3、编译成功
- 3、腾讯DuiLib编译和运行vs 2017
- 3.1、下载并解压成这个样子
- 3.2、打开.sln解决方案文件
- 3.3、编译成功
- 4、原生DuiLib的.lib和.dll静态库和动态库
- 4.1、使用DuiLib先生成.dll动态库
- 4.2、使用DuiLib生成静态库
- 4.3、编写一个win32项目
- 4.3.1、新建项目
- 4.3.2、配置项目
- 4.3.3、包含头文件以及使用DuiLib命令空间
- 4.3.4、编写入门简单程序使用.dll动态库
- 4.3.5、编写入门简单程序使用.lib动态库
- 4.3.5.1、生成lib静态库,正确编译 Duilib 静态库的方法
- 4.3.5.1.1、添加官方 DuiLib_Static 项目
- 4.3.5.2、在项目预处理器中添加UILIB_STATIC
- 4.3.5.3、添加DuiLib_d.lib静态库
- 4.3.5.4、再次编译出现如下问题
- 4.3.5.5、放在任意目录下都可以运行
1、原生DuiLib的编译和运行
原生DuiLib地址:DuiLib地址 。
1.1、下载并解压成这个样子
1.2、打开.sln解决方案文件
原生DuiLib默认是多字节多字符集、以及默认生成 .dll 动态库。
1.3、编译成功
在bin目录下,生成了各种**.exe可执行文件以及.dll**动态库:
2、网易DuiLib编译和运行
github地址:网易DuiLib 。
2.1、下载并解压成这个样子
2.2、打开.sln解决方案文件
2.3、编译成功
在bin目录下,生成了各种 .exe 可执行文件以及在libs目录下 .lib 静态库:
3、腾讯DuiLib编译和运行vs 2017
3.1、下载并解压成这个样子
3.2、打开.sln解决方案文件
3.3、编译成功
4、原生DuiLib的.lib和.dll静态库和动态库
4.1、使用DuiLib先生成.dll动态库
生成目录:
4.2、使用DuiLib生成静态库
生成目录:
4.3、编写一个win32项目
4.3.1、新建项目
出来这个界面:
4.3.2、配置项目
多字节多字符集:
配置头文件目录:
配置库目录:
4.3.3、包含头文件以及使用DuiLib命令空间
编译没有问题就说明配置DuiLiB包含成功:
4.3.4、编写入门简单程序使用.dll动态库
// new_test_demo.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "new_test_demo.h"
#include"UIlib.h"
using namespace DuiLib;
class CFrameWindowWnd : public CWindowWnd, public INotifyUI
{
public:
CFrameWindowWnd() { };
LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); };
UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; };
void OnFinalMessage(HWND /*hWnd*/) { delete this; };
void Notify(TNotifyUI& msg)
{
if (msg.sType == _T("click")) {
if (msg.pSender->GetName() == _T("closebtn")) {
Close();
}
}
}
LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CREATE) {
m_pm.Init(m_hWnd);
CControlUI *pButton = new CButtonUI;
pButton->SetName(_T("closebtn"));
pButton->SetBkColor(0xFFFF0000);
m_pm.AttachDialog(pButton);
m_pm.AddNotifier(this);
return 0;
}
else if (uMsg == WM_DESTROY) {
::PostQuitMessage(0);
}
LRESULT lRes = 0;
if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes;
return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
}
public:
CPaintManagerUI m_pm;
};
// 程序入口及Duilib初始化部分
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
CFrameWindowWnd* pFrame = new CFrameWindowWnd();
if (pFrame == NULL) return 0;
pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
pFrame->ShowWindow(true);
CPaintManagerUI::MessageLoop();
return 0;
}
编译:
运行的时候会报错,缺少 .dll 动态库:
只需要把**.dll动态库放到和.exe**同级目录即可。
再次运行成功:
4.3.5、编写入门简单程序使用.lib动态库
4.3.5.1、生成lib静态库,正确编译 Duilib 静态库的方法
4.3.5.1.1、添加官方 DuiLib_Static 项目
在官方的代码中有一个 DuiLib_Static.vcxproj
的工程文件,这就是 DuiLib 的静态库编译的工程。
**(这里已经修改过的)**但是细心的人可能发现了,仅有一个 .vcproj
的项目文件,没有 .filters
的文件目录树描述文件。没关系,我们直接复制一份 Duilib.vcxproj.filters
文件改名为 Duilib_Static.vcxproj.filters
即可,这个文件只是描述在 vs 中看到的文件目录结构,静态库和动态库都使用一样的目录树即可。修改完成后是下面这幅图的样子:
我们增加了 Duilib_Static.vcxproj.filters 的文件,此时我们把这个工程添加到 duilib 的解决方案中。然后打开DuiLib_Static.vcxproj编译:
这样就生成了DuiLib_d.lib静态库。
4.3.5.2、在项目预处理器中添加UILIB_STATIC
4.3.5.3、添加DuiLib_d.lib静态库
4.3.5.4、再次编译出现如下问题
修改C++运行库为多线程调试:
再次编译: