从Linux使用Windows DLL

我们需要接口到第三方应用程序,但公司背后的应用程序不公开消息协议,并只提供Windows DLL的接口。

我们的应用程序是基于Linux的,所以我不能直接与DLL沟通。 我找不到任何现有的解决scheme,所以我正在考虑在Linux和Windows之间编写基于套接字的桥接,但是我确定这不是一个独特的问题,有人应该这样做。

您知道任何允许从Linux上的C应用程序调用Windows DDL函数的解决scheme吗? 它可以使用葡萄酒或单独的Windows PC – 无所谓。

提前谢谢了。

Solutions Collecting From Web of "从Linux使用Windows DLL"

任何解决方案都需要一个基于TCP / IP的“远程处理”层,在“类似windows”环境中运行的DLL和你的linux应用程序之间。

您需要编写一个简单的PC应用程序来公开DLL函数,可以使用自制协议,也可以使用XML-RPC,SOAP或JSON协议。 RemObjects SDK可能会帮助你 – 但可能是矫枉过正。

我会坚持一个'真正'或虚拟PC。 如果您使用Wine,DLL开发人员不太可能提供任何支持。

MONO也不可能有任何帮助,因为你的DLL可能不是一个.NET程序集。

得到一个嗅探器,并学习协议。 那就是我正在做的。

有时候,最好是从一个大的供应商那里挑选一个小的供应商,因为你的业务规模会给你更多的权重。 我们已经与AV引擎厂商合作。

如果你对他们非常重要,他们应该提供一个文档化的,支持的协议,一个Linux版本的库,或者源代码到库。

否则,您必须像使用RPC一样在RPC环路中运行一个Windows机器,这可能非常不方便,特别是如果其余整个基础架构都运行Linux。

供应商是否会支持在Windows VM中使用他们的库? 如果性能不重要,您可能可以做到这一点。

调用DLL函数本身当然只是冰山一角。 如果DLL调用Win32,那么你会有一个相当大的链接问题。 我想葡萄酒可以帮助你,不知道他们是否提供解决方案。

国际海事组织,最好的选择是使用套接字。 我以前做过这个,它的作用就像一个魅力。

这个问题已经过了几年了,但这是另一种方法。 使用objdump -d反汇编DLL。 你可能会得到纯粹的,没有成熟的垃圾,或者代码充满Windows调用,或者两者兼而有之。 函数通常由一系列push指令分隔,并以ret指令结束。

我没有这样做,但是你可以使用MONO为它创建一个包装。