有个C++的类库,读取文件的,要放到Unity里面能够调用。但是有问题,基本的CreateFileA返回的结果是-1,错误代码是123,显示是路径错误,但是路径正气的,怀疑是不是从Unity里面运行不行。单独使用时没问题。那考虑分开好了,通过通信的方式在Unity里面用c#调用c++,那就需要一个通信过程了,可以用最基本的tcp,但是我想找一个c++上的webapi服务端,就去找了。参考:C++ Web相关的框架整理-电子发烧友网
暂时考虑用微软的C++ Rest SDK。
GitHub - microsoft/cpprestsdk: The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
代码下载下来了,不知道怎么使用。
根据提示,先安装vcpkg:
GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS
打开VSCode,运行一个终端(powershell),输入指令。
> git clone https://github.com/microsoft/vcpkg
这个没问题,当前电脑网络有点奇怪,开着可以下载,不开着这个下载不下来。
> .\vcpkg\bootstrap-vcpkg.bat
这个显示无法下载vcpkg.exe,手动从提示的网址上下载下来,放到vcpkg文件夹里面。
然后用vcpkg下载。
.\vcpkg\vcpkg install cpprestsdk cpprestsdk:x64-windows
第一次运行时不断下载相关的其他包,最后有个下载不了,卡住了。
再次运行,可以了。
创建一个c++的控制台应用程序,添加dll引用。参考:visual studio c++ 动态调用第三方DLL_lvshow的博客-CSDN博客_vs调用第三方dll
添加include代码,参考:C++ REST SDK(Casablanca)_阿萨德科的博客-CSDN博客_c++ rest sdk
似乎不行,VisualStudio也提示可以用vcpkg安装。
想到那也可以用NuGit安装吧,果然有,安装上去后,include代码可以了。
那其实前面的都没有必要,在VisualStudio里面使用的话到NuGit上找合适的类库安装就好了。无论是C#代码还是C++代码。
------------
C++项目怎么引用第三方的dll?
参考:
Visual Studio 2019:引用动态DLL项目_OceanStar的学习笔记的博客-CSDN博客_vs2019添加dll引用自己创建的独立的dll,测试可以这样引用,3个地方要修改。但是cpprest却不行,奇怪了,我是把cpprest_2_10d.dl和cpprest_2_10d.lib拷贝过来了的。
折腾了一下,还是不行,算了,还是NuGit安装吧,有空再研究一下VisualStudio引用DLL的问题。
1.Visual Studio介绍&简单工程建立_哔哩哔哩_bilibili
--------------
前面的参考资料里面的代码发现是客户端的代码,我需要的是服务端的,C++作为服务端提供WebApi接口给Unity调用。
所有的例子:Samples · microsoft/cpprestsdk Wiki · GitHub
服务端例子参考:
例子1:
GitHub - Meenapintu/Restweb: Sample code of cpprestsdk (casablanca), it's a sample example for beginner to get started with cpprestsdk with database(currently PostgreSQL) integration with basic structure, programmer can extend it.
例子2:
https://github.com/ivanmejiarocha/micro-service
结合前面两种的代码,把需要的拿到项目中,能够简单的从浏览器访问WebApi接口了。
注意例子2中的,basic_controller.cpp里面的
#include "basic_controller.h"
#include "network_utils.h"
要改成
#include "network_utils.h"
#include "basic_controller.h"
不然会出现错误,
具体我也不懂,boost安装的是NuGet上的相关的,包括一些vc142的其他相关包。
PM> Install-Package boost
PM> Install-Package boost_date_time-vc142
PM> Install-Package boost_filesystem-vc142
PM> Install-Package boost_log-vc142
PM> Install-Package boost_system-vc142
PM> Install-Package boost_thread-vc142
PM> Install-Package boost_chrono-vc142
PM> Install-Package boost_log_setup-vc142
PM> Install-Package boost_chrono-vc142
PM> Install-Package boost_atomic-vc142
参考:c++ - LNK1104cannot open file 'libboost_log-vc142-mt-gd-x64-1_72.lib'? - Stack Overflow
还有就是network_utils里面的一些string参数要改成utility::string_t参数,可能具体的包那时和现在不一样了吧。找了个StringToWString转换一下。
另外就是json:value:string部分代码要改一下,参考:JSON · microsoft/cpprestsdk Wiki · GitHub
============================
接下来是C#那边客户端了,使用UnityWebRequest获取网址的返回值就行了,默认返回的就是json的结果。简单参数就放到构建的url里面传递给服务端。
------------------------------------------------
如何传递二进制文件?
如何返回二进制文件?