在Linux中等效的Win32数据类型

时间:2013-04-30 09:56:31

标签: c++ linux

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

4 个答案:

答案 0 :(得分:9)

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

BYTE确实是unsigned charDWORDunsigned intWORDunsigned 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;会这样做。

答案 1 :(得分:1)

typedef unsigned long DWORD;
typedef unsigned char BYTE;

CString -> maybe basic_string<TCHAR> ?

答案 2 :(得分:1)

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

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

typedef unsigned char             BYTE;

这些可以轻松改变。

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

答案 3 :(得分:1)

  • DWORD = uint32_t
  • BYTE = uint8_t

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

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

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