0

这是我使用 Visual Studio从这里移植到我的 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 部分代码。但它不是那样发生的。为什么?

4

1 回答 1

2

我认为您在 Windows 中的宏存在“案例”问题,应该是 _WIN32 或 WINNT,请查看此处

您可能还想检查这些:

http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx

它们在移植代码时很方便。

于 2013-11-12T13:28:13.983 回答