Mfc 自定义标量值类型

Mfc 自定义标量值类型,mfc,protocol-buffers,Mfc,Protocol Buffers,我目前正在尝试重写MFC应用程序的网络代码,以便稍后将其安装到新服务器(用c#编写)。 我正在试验protobuf,以确保所有数据模型都是相同的 我的问题是,protobuf使用的标量值类型不为MFC类型系统所理解。它使用DWORD代替uint32,字节代替字节或bool,等等。这需要自定义类型映射/转换,而这并不一定需要我承担工作 有没有办法改变protobuf中使用的数据类型 protobuf模型示例如下: syntax = "proto3"; package CInterop; opti

我目前正在尝试重写MFC应用程序的网络代码,以便稍后将其安装到新服务器(用c#编写)。 我正在试验protobuf,以确保所有数据模型都是相同的

我的问题是,protobuf使用的标量值类型不为MFC类型系统所理解。它使用DWORD代替uint32,字节代替字节或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();

但是,我不想抛出这些类型,这应该是自动发生的。

通常我主张只在中间插入一个翻译层,意思是:一组与MFC一起工作的类型,以及另一组与原型BuffF一起工作的类型,看起来只是类似的ISH。但是,如果这是C#,则protobuf net可能有一些选项。你有具体的模型例子吗?@MarcGravel很抱歉,我花了这么长时间才做出回应。我添加了示例代码。你能告诉我怎样才能方便地写这样一个包装纸吗?另一件事是,大约有800包。编写800个包装类可能会成为一个麻烦。通常我主张只在中间插入一个翻译层,意思是:一组与MFC一起工作的类型,以及另一组与原型BuffF一起工作的类型,看起来只是类似的ISH。但是,如果这是C#,则protobuf net可能有一些选项。你有具体的模型例子吗?@MarcGravel很抱歉,我花了这么长时间才做出回应。我添加了示例代码。你能告诉我怎样才能方便地写这样一个包装纸吗?另一件事是,大约有800包。编写800个包装器类可能会让人头疼。