[英]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 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;
会这样做的。
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.