我试图转换这是在程序中使用广泛DWORD,CString的和BYTE一个C ++库,现在我从C ++的Win32库转换的代码到Linux程序。 另外我使用的openSUSE 12.3和Anjuta的IDE做到这一点,请帮助我,我应该使用上述类型的哪种类型? 我想我应该用unsigned int类型为DWORD和字符串CString的和无符号的字符,而不是字节是不是?
Answer 1:
CString
不会直接转换成std::string
,但它是一个大致相当于。
BYTE
确实是unsigned char
和DWORD
是unsigned int
。 WORD
是unsigned short
。
你一定要使用typedef actual_type WINDOWS_NAME;
修复代码了,不经过任何地方,以取代类型。 我想补充一个新的headerfile被称为像“wintypes.h”,以及包括无处不在“WINDOWS.H”一词。
编辑发表评论:有了CString
,它实际上取决于如何使用它(和代码是否使用MS什么所谓的“统一”或“ASCII”字符串)。 我会很想创建一个类CString
,然后使用std::string
内部的。 它的大部分或许可以通过简单地调用相当于做std::string
的功能,但是有些功能可能需要一些更多的节目-再次,它依靠什么成员函数CString
的实际使用。
对于LP<type>
,这仅仅是一个指向<type>
,所以typedef BYTE* LPBYTE;
和typedef DWORD* LPDWORD;
将这样做。
Answer 2:
typedef unsigned long DWORD;
typedef unsigned char BYTE;
CString -> maybe basic_string<TCHAR> ?
Answer 3:
我会建议使用uint32_t的和uint8_t从DWORD和BYTE和正常的char *或为const char *字符串(或STD:字符串类C ++)。
也许最好的思想是利用现有的代码类型定义:
typedef unsigned char BYTE;
这些可以很容易地改变。
如果你重写代码使用CHAR,INT,长期是有益的和(U)intX_t类型,是你需要一个定义的大小。
Answer 4:
-
DWORD
=uint32_t
-
BYTE
=uint8_t
这些类型是不OS细节,并且加入到C ++ 11。 您需要include <cstdint>
得到它们。 如果你有一个旧的编译器可以使用升压/ cstdint,这是唯一的标题。
使用std::string
代替CString
,但你需要改变一些代码。
有了这些改变你的代码应该编译在Windows和Linux。