如何在 C++ 中检测 Wine 运行 来自 Linux 或 mac OS 环境?

How to detect is Wine running from Linux or from mac OS environment in C++?

我有一个 C++ 应用程序,它使用 mac OS 的 Wine 和 Linux 的 Wine 运行。我正在寻找一种使用 C++ 检测主机 OS 的方法。

我唯一找到的是一种检测它是否是 Wine 的方法(使用 wine_get_version),但我仍然需要分开 mac OS 和 Linux 运行。

有什么办法吗?

谢谢!

正如@NathanOliver 在评论中提到的,您应该为此使用 wine_get_host_version()。与wine_get_version()一样,需要使用GetProcAddress()从NTDLL中获取函数指针。函数指针的 C 函数签名为:

void (CDECL *)( const char **sysname, const char **release )

您提供两个 const char* 变量的地址,wine_get_host_version() 将它们设置为指向两个字符串。这些字符串是由 uname() 系统库函数输出的。 (如果您对输出不感兴趣,可以安全地为该参数传递 NULL。)

对于 macOS,*sysname 将被设置为指向 "Darwin"。我相信对于 Linux,它将指向 "Linux"。 (它在我测试过的几个系统上确实如此,但我不知道它的一致性如何。)

我们需要检查编译器(GNU GCC 或 G++)定义的 macros 用于检查我们的 c/c++ 脚本正在执行的 os。

#include <stdio.h>

int main() 
{
    #if __APPLE__
        // apple specific code
    #elif _WIN32
        // windows specific code
    #elif __LINUX__
        // linux specific code
    #else
        // general code or warning
    #endif
    // general code
    return 0;
}

some more macros