mfc - 自定义标量值类型
问题描述
我目前正在尝试重写 MFC 应用程序的网络代码,以便稍后将其安装到新服务器(用 c# 编写)。我正在试验 protobuf 以确保所有数据模型都是相同的。
我的问题是,MFC 类型系统不理解 protobuf 使用的标量值类型。它使用 DWORD 代替 uint32,使用 BYTE 代替 byte 或 bool 等等。这需要自定义类型映射/转换,这并不一定需要我的工作。
有没有办法改变 protobuf 中使用的那些数据类型?
一个示例 protobuf 模型将是:
syntax = "proto3";
package CInterop;
option csharp_namespace = "CCX.Protobuf.Login";
message LoginAck {
LoginResultStatus Status = 1;
uint32 dwUserID = 2;
uint32 dwCharID = 3;
uint32 dwKEY = 4;
uint32 dwMapIP = 5;
uint32 wPort = 6;
uint32 bCharCreateCount = 7;
bool IsInPcRoom = 8;
uint32 PremiumPcRoomValue = 9;
uint64 dCurrentTime = 10;
uint64 dKey = 11;
string Reason = 12;
uint64 iDuration = 13;
bool bEternal = 14;
}
当前的用法是
CInterop::LoginAck loginAck;
(*pPacket) >> loginAck; // Reads the packet from the buffer
m_dwUserID = (DWORD)loginAck.dwuserid();
m_dwKickID = (DWORD)loginAck.dwcharid();
m_dwKEY = (DWORD)loginAck.dwkey();
vADDR.sin_addr.S_un.S_addr = (ULONG)loginAck.dwmapip();
vADDR.sin_port = (USHORT)loginAck.wport();
m_bCreateCardCnt = (byte)loginAck.bcharcreatecount();
m_bInPCROOM = (BYTE)loginAck.isinpcroom();
m_dwPrmPCROOM = (DWORD)loginAck.premiumpcroomvalue();
但是在这里,我不想强制转换类型,这应该以某种方式自动发生。
解决方案
推荐阅读
- javascript - 如何将缓动放入滚动绑定功能?
- python - 如何在熊猫中转播数据框
- c# - AngularJS Post to C# Function 因大字符串而失败(立即出现错误 500)
- angular - Angular:检查 Observable 的响应类型
- django - 在 django 视图中访问表单元素
- angular - Firebase 动态链接仅在 iOS 中的移动 Safari 和 Chrome 上修改重定向 url。我使用角形辅助插座
- mongodb - 连接到 mongodb 服务器时出现以下错误
- android - 将 Junit4 测试迁移到 androidx:是什么原因导致“无法加载委托运行程序”?
- python - 不需要更新时的排行榜代码错误
- node.js - 如何使用外部样式和字体渲染 ejs 文件?