VisualStudio2022和QT开发同一套代码互相之间无法通讯的部分问题

同一套代码,用VisualStudio2022和QT同步开发,互相通信时,因为用的是同一套结构体,要注意两边的数据类型的大小是否一致,所以要做数据类型大小的判断,如果大小不同,则视作非法数据,要停止运行。

在相同项目下VisualStudio的数据类型所占字节大小输出:

		int c = sizeof(OSVERSIONINFOEX);//156
		
		char OsVerInfoEx[sizeof(OSVERSIONINFOEX)];// 版本信息

在相同项目下qt中数据类型所占字节大小输出:所以要和VisualStudio通信就只能用OSVERSIONINFOEXA来限定char的大小,两边的数据才会一致。

    int c = sizeof(OSVERSIONINFOEX);//284
    int c1 = sizeof(OSVERSIONINFOEXA);//156//
    int c2 = sizeof(OSVERSIONINFOEXW);//284//UNICODE编码

	char OsVerInfoEx[sizeof(OSVERSIONINFOEXA)];// 版本信息

查看源码得知,在VisualStudio中对编码类型做了判断,所以使用OSVERSIONINFOEX时,会指向OSVERSIONINFOEXA,所以占用156个字节。


typedef struct _OSVERSIONINFOEXA {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    CHAR   szCSDVersion[ 128 ];     // Maintenance string for PSS usage
    WORD   wServicePackMajor;
    WORD   wServicePackMinor;
    WORD   wSuiteMask;
    BYTE  wProductType;
    BYTE  wReserved;
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
typedef struct _OSVERSIONINFOEXW {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    WCHAR  szCSDVersion[ 128 ];     // Maintenance string for PSS usage
    WORD   wServicePackMajor;
    WORD   wServicePackMinor;
    WORD   wSuiteMask;
    BYTE  wProductType;
    BYTE  wReserved;
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
#ifdef UNICODE
typedef OSVERSIONINFOEXW OSVERSIONINFOEX;//如果是UNICODE编码,就指向OSVERSIONINFOEXW
typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
#else
typedef OSVERSIONINFOEXA OSVERSIONINFOEX;//否则就指向OSVERSIONINFOEXA
typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
#endif // UNICODE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖人称-杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值