繁体   English   中英

Linux中的Win32数据类型等效

[英]Win32 data types equivalant in Linux

我试图转换一个在程序中广泛使用DWORD,CString和BYTE的C ++库,现在我将代码从C ++ Win32库转换为linux程序。 另外我使用openSUSE 12.3和Anjuta IDE来做这个,请帮助我使用哪种类型而不是提到的类型? 我想我应该使用unsigned int for DWORD和string for CString and unsigned char而不是BYTE是不是?

CString不会直接转换为std::string ,但它是一个粗略的等价物。

BYTE确实是unsigned charDWORDunsigned int WORD没有unsigned short

你绝对应该使用typedef actual_type WINDOWS_NAME; 修复代码,不要到处替换类型。 我会添加一个名为“wintypes.h”的新头文件,并且包含使用“windows.h”的地方。

编辑注释:使用CString ,它实际上取决于它的使用方式(以及代码是否使用MS调用“Unicode”或“ASCII”字符串)。 我很想创建一个类CString ,然后在其中使用std::string 其中大部分都可以通过简单地调用等效的std::string函数来完成,但是某些函数可能需要更多的编程 - 再次,它确实取决于实际使用CString成员函数。

对于LP<type> ,这只是指向<type>的指针,所以typedef BYTE* LPBYTE; typedef DWORD* LPDWORD; 会这样做的。

typedef unsigned long DWORD;
typedef unsigned char BYTE;

CString -> maybe basic_string<TCHAR> ?

我建议对于DWORD和BYTE使用uint32_t和uint8_t,对于字符串使用普通的char *或const char *(或者对于C ++使用std:string类)。

可能最好的想法是对现有代码使用typedef:

typedef unsigned char             BYTE;

这些可以很容易地改变。

如果你重写代码使用char,int,long是有用的,而(u)intX_t类型,你需要一个定义的大小。

  • DWORD = uint32_t
  • BYTE = uint8_t

这些类型不是OS特定的,并且已添加到C ++ 11中。 你需要include <cstdint>来获取它们。 如果你有一个旧的编译器,你可以使用boost / cstdint,它只是标题。

使用std::string而不是CString ,但您需要更改一些代码。

通过这些更改,您的代码应该在Windows和Linux上进行编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM