VS2017编译及使用DuiLib库

最近在使用DuiLib遇到很多问题,在一一解决完后作以总结。

1. DuiLib库的下载

使用git获取Duilib库:https://github.com/duilib/duilib

2.库的编译

库源码如下图,用VS2017打开红框文件

VS2017编译及使用DuiLib库_第1张图片
打开后会提醒重定项目,点确定即可
VS2017编译及使用DuiLib库_第2张图片
首次打开会报很多错误,如图:
VS2017编译及使用DuiLib库_第3张图片
仔细观察会发现,BOOL类型是大写就不识别会报错,打开 调试->DuiLib属性,设置Windows SDK版本。
VS2017编译及使用DuiLib库_第4张图片
这时打开就不会报错了。
继续进行编译,回报出错误: error MSB8020: 无法找到 v120_xp 的生成工具(平台工具集 =“v120_xp”)。若要使用 v120_xp 生成工具进行生成,请安装 v120_xp 生成工具。或者,可以升级到当前 Visual Studio 工具,方式是通过选择“项目”菜单或右键单击该解决方案,然后选择“重定解决方案目标”。
VS2017编译及使用DuiLib库_第5张图片
打开 调试->DuiLib属性,设置平台工具集为V141即可。
VS2017编译及使用DuiLib库_第6张图片
再次编译,又会报出语法错误:error C2065: “hFile”: 未声明的标识符
VS2017编译及使用DuiLib库_第7张图片
在定义前加个回车即可:
VS2017编译及使用DuiLib库_第8张图片
至此可以成功编译,最后虽然会报如下错误,但是已经生成了我们需要的库,可以忽略。
VS2017编译及使用DuiLib库_第9张图片

3.生成DLL

要问要生成4个DLL,所以在4中环境下分别编译库,在bin目录下就会生成4个DLL库。
VS2017编译及使用DuiLib库_第10张图片

4.Win32程序使用DuiLib库

新建Windows桌面应用程序
VS2017编译及使用DuiLib库_第11张图片
打开 调试->属性,在【包含文件】中添加目录,其路径为【Duilib】的路径,
在【库文件】中添加目录,其路径为【Lib】的路径
其中【bin】目录里的是dll(4个),后面自己新建工程时需要拷贝到exe目录下 ,最好Debug和Release都考一份。
VS2017编译及使用DuiLib库_第12张图片
VS2017编译及使用DuiLib库_第13张图片
VS2017编译及使用DuiLib库_第14张图片
然后,在源文件移除自带的cpp文件
VS2017编译及使用DuiLib库_第15张图片
添加test.cpp文件,代码如下:

#pragma once
#include "stdafx.h"
#include 
using namespace DuiLib;

#ifdef _DEBUG
#   ifdef _UNICODE
#       pragma comment(lib, "DuiLib_ud.lib")
#   else
#       pragma comment(lib, "DuiLib_d.lib")
#   endif
#else
#   ifdef _UNICODE
#       pragma comment(lib, "DuiLib_u.lib")
#   else
#       pragma comment(lib, "DuiLib.lib")
#   endif
#endif

class CDuiFrameWnd : public CWindowWnd, public INotifyUI
{
public:
    virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
    virtual void    Notify(TNotifyUI& msg) {}

    virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        LRESULT lRes = 0;

        if( uMsg == WM_CREATE ) 
        {
            CControlUI *pWnd = new CButtonUI;
            pWnd->SetText(_T("Hello World"));   // 设置文字
            pWnd->SetBkColor(0xFF00FF00);       // 设置背景色

            m_PaintManager.Init(m_hWnd);
            m_PaintManager.AttachDialog(pWnd);
            return lRes;
        }

        if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) ) 
        {
            return lRes;
        }

        return __super::HandleMessage(uMsg, wParam, lParam);
    }

protected:
    CPaintManagerUI m_PaintManager;
};

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    CPaintManagerUI::SetInstance(hInstance);

    CDuiFrameWnd duiFrame;
    duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
    duiFrame.ShowModal();
    return 0;
}

运行结果:
VS2017编译及使用DuiLib库_第16张图片

你可能感兴趣的:(C++)