以下是我使用Visual Studio从here移植到Windows计算机的函数的快照。
bool MinidumpFileWriter::Open(const char *path) {
assert(file_ == -1);
#if __linux__
file_ = sys_open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
#else
file_ = open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
#endif
return file_ != -1;
}
目前,这在我的Linux机器上运行良好。现在当我尝试将它移植到我的Windows机器上时:
bool MinidumpFileWriter::Open(const char *path) {
assert(file_ == -1);
#if __linux__
file_ = sys_open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
return file_ != -1;
#elif _Win32
HANDLE hFile;
hFile = CreateFile(path, // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL);
if (hFile == INVALID_HANDLE_VALUE){
return false;
}
else{
return true;
}
#else
file_ = open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
return file_ != -1;
#endif
}
'#else'宏中的open
函数给出了一个无法识别的错误。根据我对操作系统宏的理解,Visual Studio不应该担心指令内部的内容,只编译Windows部分代码。但事情并非如此。为什么?
答案 0 :(得分:2)
我认为您的Windows中的宏存在“大小写”问题,应该是_WIN32或WINNT,请检查here。
您可能还想查看以下内容:
http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx
在移植代码时它们非常方便。