在Linux系统上运行Windows DLL文件

9
我想知道你是否可以在Linux操作系统的应用程序中(使用任何编程语言),加载Windows操作系统(例如user32.dll)的DLL文件。 DLL文件将位于Linux文件系统上的某个目录中。感谢您的帮助。问候!

6
当然可以:使用fopen("user32.dll", "rb")。问题是:你想用它做什么? - mmmmmmmm
我想使用特定的函数(例如user32.dll)DLL。 - Lobo
3
这并不是(直接)可能的。可能会有使用WINE的方法。 - mmmmmmmm
6个回答

9
是的,您可以使用适当的包装库加载DLL并调用其函数,但如果DLL本身具有依赖于平台的依赖项,则基本上是无用的。这种方法用于像闭源视频编解码器之类的东西,其中没有(非平凡的)依赖关系存在。
User32.dll当然是操作系统的一部分,并与许多NT内核函数密切相关,而这些函数在Linux中不存在。Wine不使用Windows user32.dll,而是提供自己的版本,提供等效的功能。
加载Windows的user32.dll肯定是没有用的,因为它主要是其他DLL、进程(例如CSRSS)和在Linux下不存在的内核调用的包装器。不过,您可以加载并使用Wine的版本。

8
不行。这两种架构在根本上是不同的。
我注意到你的问题标记为C ++。如果它是一个使用CLR字节码构建的.NET DLL,则可以通过在Mono下运行的应用程序引用它。

7

如果你编写一个包装器,那么这是可能的。这就是 win32 codecs 在 Linux 上工作的方式。此外,Wine 使用许多 DLL。


4
你可能需要自定义一个 Wine 构建(主页维基百科页面)来为你的应用程序提供支持。不过这就像是使用一把重锤子。 :-)

2

DLL是Windows的一种格式(即它是共享库概念的微软实现)。
它不是Linux所理解的格式。
Linux使用ELF格式作为动态库。


0
为什么你想要这样做?是为了执行一个使用该 DLL 的程序(.exe)吗?如果是这样,那么你需要在 Linux 机器上安装一个 Windows 模拟器,例如 wine

2
Wine不是模拟器,而是兼容层。如果你不在x86或amd64架构中,它将无法工作。 - BatchyX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接