FLAMEc隨手記

一陣風飄過~~~

0%

protobuff+vs2022鬼打牆心得

我這次要用Vue3+Websocket對接rouletteserver C++ Server~

封包要使用protobuff,比較方便啊!!

一開始我是去抓protobuff release版本 github連結(https://github.com/protocolbuffers/protobuf/releases)

這時候版本是 32.0-rc2~

抓了protobuf-32.0-rc2.zip和protoc-32.0-rc-2-win64.zip

前者是有source code~後者有protoc.exe

但是呢…搞了很久都沒辦法在vs2022專案中編譯過!!!

然後另尋辦法,使用vcpkg安裝protobuff,大概流程如下~

先在專案目錄下建立vcpkg.json,內容如下

1
2
3
4
5
6
7
8
{
"name": "rouletteserver",
"version-string": "1.0.0",
"builtin-baseline": "f993fc42532591aeb07328bbe0add868b0629d0f",
"dependencies": [
"protobuf"
]
}

然後執行vs2022的 工具=>命令列=>開發人員命令提示字元~

開啟一個黑色小視窗,然後輸入vcpkg install~~~

可有能會被停醒要開啟manifest!!!

在專案右鍵=>屬性=>vcpke中,調整成是,我印象中一開始是沒有vcpkg頁面的,大概是執行vcpkge install後出現的!?

然後Build成功了!!!!!!!!!!!!!大歡喜XDDDDDDDDDDDD

我的第一個message如下,在login.proto中

1
2
3
4
5
6
7
8
9
10
11
12
13
syntax = "proto3";

package loginpackage;

message LoginRequest {
string username = 1;
string password = 2;
}

message LoginResponse {
string username = 1;
string password = 2;
}

使用結果是執行下面程式碼後…

1
2
3
4
5
loginpackage::LoginResponse res;

res.set_username("test");

std::cout << "user=" << res.username() << std::endl;

會印出

user=

是空值,沒有資料,我研究呢很久找不到問題0.0…明明設定了…

然後跑去protobuff git直接抓最新版,安裝CMake,Build了一個版本出來試試看~

但是執行上面空值程式碼還是空值!!!!

最後我發現是我亂複製dll到x64\Debug下面~

大概是因為一開始缺東缺西不知從哪邊複製的…

導致debug版本用錯dll,然後就string穩定空值,只有int等有效果~

所以最後可行流程是!!

  1. 建立vcpkg.json並用上面說的內容然後vcpkg install,builtin-baseline要去vcpkg git上面查~
  2. 不要自行新增其他include目錄和其他程式庫目錄,全部都交給vcpkg
  3. 不要亂複製dll檔案到執行目錄(x64\Debug),正常會自己產生
  4. debug版本要用debug版本dll,abseil_dll.dll,libprotobufd.dll,libprotobuf-lited.dll~
  5. release版本要用debug版本dll,abseil_dll.dll,libprotobuf.dll,libprotobuf-lite.dll~

然後就可以執行了!!

字串也不會很神奇的空值!!

順便提一下,vcpkg安裝的版本會比github上面的版本稍舊,大概是穩定版關係

這邊沒紀錄用CMake開vs2022專案,個人覺得直接用vcpkg比較快用方便就不說了~