如何在 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;
}
我有一个 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;
}