这个项目是 IPSC 6.0 呼叫中心的 Windows 客户端,它的主要特性有:
作为一个实际投入使用的桌面程序,学习者可以通过这个项目看到许多有一定深入性的内容:
- 在 C# GUI程序中使用 C++ 库的复杂技术,包括 CMake, swig, c++/cli, dotnet GUI 线程和 Native 线程协同使用等
- 手动编写 VisualStudio C/C++ 以及 C# 项目模板,以及使用 MSBuild 同时针对多个目标进行构建
- 如何在桌面程序嵌入轻量级 Web 服务器,以及在此基础上实现一个 JSON-RPC over Websocket 服务程序,并最终打通 Web 服务与 GUI 程序
- 按照 MVVM 设计原则编写桌面应用
- 如何管理一个有十余个项目的 VisualStudio 解决方案,以及如何在这个解决方案上运用 git 进行版本控制
Note:
版权和许可信息详见 LICENSE 文件
Note:
访问 https://tanbro.github.io/ipsc6-agent/ 查看开发文档
这个依赖项目作为 git submodule
存放在 submodules/pjproject
,如果尚未初始化这个 git
子模块,应执行:
git submodule update --init
本项目中,我们在 Windows x86_64 桌面环境下,使用 VisualStudio 2019 构建这个依赖项目。
参考:https://trac.pjsip.org/repos/wiki/Getting-Started/Windows
- 使用 VisualStudio 2019 打开
pjproject-vs14.sln
,按照提示升级到最新的 VisualStudio 项目格式,忽略不支持的项目 - 按照提示升级所有打开的项目的
Windows SDK
(目前是v10.0
) 和平台工具集
到最新的版本(目前是v142
) - 如果提示安装
UWP SDK
,不必理会 - 在项目列表中,将
pjsua
"设为启动项目" - 生成
pjsua
。生成的库文件在lib
目录,形如libpjproject-i386-Win32-vc14-Debug.lib
如果使用 MSBuild
进行构建,命令是:
-
Win32 Debug 静态库:
msbuild pjproject-vs14.sln -target:pjsua -m -property:Configuration=Debug -property:Platform=Win32
-
Win32 Release 静态库:
msbuild pjproject-vs14.sln -target:pjsua -m -property:Configuration=Release -property:Platform=Win32
-
x64 Debug 静态库:
msbuild pjproject-vs14.sln -target:pjsua -m -property:Configuration=Debug -property:Platform=x64
-
x64 Release 静态库:
msbuild pjproject-vs14.sln -target:pjsua -m -property:Configuration=Release -property:Platform=x64
IPSC 一向以来使用这个库进行服务器-坐席客户端的网络通信
此依赖项十分的老旧,无法使用现有的 VisualStudio
直接打开,不过目前尚可用其提供的 CMake
设置。
在这个子项目的目录下新建子目录 build
,然后在 build
下新建两个子目录 Win32
与 x64
,分别作为 x86
和 x86_64
的 CMake
构建目录。
RakNet
└── build
└── Win32
└── x64
对于 x86
,我们打开 x86 Native Tools Command Prompt for VS
,在 Win32
目录执行:
cmake -A Win32 ../..
从而产生 VisualStudio 项目文件。
但是,生成的 .vcxproj
项目文件有一下问题:
-
Win32
项目的 “首选的生成工具体系结构” 设置错误:ℹ Tip:
经测试,构建工具实际上并不会选择意料之外的生成工具体系结构,所以可以忽略这个问题。
要修复这个错误,我们可以:
-
使用 IDE 查看这几个项目的属性,将
配置属性 -> 高级 -> 首选的生成工具体系结构
修改为 "32 位(x86)" -
或者直接修改
build/Win32/Lib/DLL/RakNetDLL.vcxproj
文件,将行如<PropertyGroup> <PreferredToolArchitecture>x64</PreferredToolArchitecture> </PropertyGroup>
的改为:
<PropertyGroup> <PreferredToolArchitecture>x86</PreferredToolArchitecture> </PropertyGroup>
-
-
转义字符串错误:
ℹ Tip:
这个错误只出现在静态库构建对象的项目文件中。而我们并不需要 RakNet 的静态库,所以可以忽略这个问题。
生成的 RakNetLibStatic.vcxproj
项目文件中可能存在转义字符错误。
使用文本编辑器打开生成的 Visual Studio
项目文件, build/{Win32|x64}/Lib/LibStatic/RakNetLibStatic.vcxproj
,找到
<AdditionalOptions>%(AdditionalOptions) /machine:X86 LIBCMTD.lib "MSVCRT.lib&quot"%3B""</AdditionalOptions>
设置项,将 这样包含错误转义字符的选项改为 %(AdditionalOptions) /machine:X86 LIBCMTD.lib MSVCRT.lib
。
然后进行构建,方法是:
-
使用
VisualStudio
打开解决方案,构建项目RakNetDLL
-
或者使用
CMake
命令:-
构建
Debug
目标:cmake --build . --target RakNetDLL --config Debug
-
构建
Release
目标:cmake --build . --target RakNetDLL --config Release
-
x86_64
的构建与之类似,在 x64
目录,使用 x64 Native Tools Command Prompt for VS
重复上述过程即可(注意替换目标架构参数为x64
)。
最后,为了确保将所需头文件复制到 include
目录,执行:
cmake -DRAKNET_GENERATE_INCLUDE_ONLY_DIR=ON ../..