我正在尝试转换一个在程序中广泛使用DWORD,CString和BYTE的C ++库,现在我将代码从C ++ Win32库转换为linux程序。 另外我使用openSUSE 12.3和Anjuta IDE来做这个,请帮助我使用哪种类型而不是提到的类型? 我想我应该使用unsigned int作为DWORD而字符串作为CString和unsigned char而不是BYTE是不是?
答案 0 :(得分:9)
CString
不会直接转换为std::string
,但它是一个粗略的等价物。
BYTE
确实是unsigned char
而DWORD
是unsigned 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;
会这样做。
答案 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上进行编译。