是否可以从 Wine 中的 Windows 应用程序 运行 调用本机 Linux API?

Is it possible to call native Linux API from a Windows application running in Wine?

场景

我有一个为 Windows 应用程序(在 C++ 中)编写的插件 (dll)。

该应用程序在 Wine 下的 Linux 上工作正常,但是,在插件中我想使用 Wine 中尚不可用的功能。

假设我可以在运行时检测到应用程序在 Wine 中是 运行,我可以动态加载本机 Linux 库(或访问本机 Linux API 在任何其他方式)以模拟所述功能?

我很好奇这是否可以在没有任何严重黑客攻击的情况下完成。

似乎有人遇到过类似的问题,或者至少已经预测到这种情况。 Wrapper-library 应该可以帮到你:

For one reason or another you may find yourself with a Linux library that you want to use as if it were a Windows DLL. There are various reasons for this including the following:

...

  1. You have a binary only Windows application that can be extended through plugins, such as a text editor or IDE.

简而言之 - 你应该创建瘦 Wine 内置 dll,它就像你的 PE 二进制文件的 ABI 和本机 Linux 库的 ABI 之间的桥梁。那么你应该 link 你的代码针对这个包装器。对于 Windows 发行版,您可以为 "wrapper" 提供空存根。这种方法允许您为插件使用一个二进制文件,它将在 Linux 上使用特定于 wine 的功能包装 DLL,并在 Windows.

上使用存根 DLL。