C++通信框架

有个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

        这个没问题,当前电脑网络有点奇怪,vpn开着可以下载,不开着这个下载不下来。

> .\vcpkg\bootstrap-vcpkg.bat

        这个显示无法下载vcpkg.exe,手动从提示的网址上下载下来,放到vcpkg文件夹里面。

然后用vcpkg下载。

.\vcpkg\vcpkg install cpprestsdk cpprestsdk:x64-windows

第一次运行时不断下载相关的其他包,最后有个下载不了,卡住了。

再次运行,可以了。

似乎生成几个dll,

创建一个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里面传递给服务端。

------------------------------------------------

如何传递二进制文件?

如何返回二进制文件?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值