我们需要与第三方应用程序接口,但应用程序背后的公司不会泄露消息协议,只提供Windows DLL接口.
我们的应用程序是基于Linux的,所以我不能直接与DLL通信.我找不到任何现有的解决方案,所以我正在考虑在Linux和Windows之间编写基于套接字的桥接器,但是我确信它不是一个独特的问题,而且之前应该有人做过.
你知道任何允许从Linux上的C app调用Windows DDL函数的解决方案吗?它可以使用Wine或单独的Windows PC - 无所谓.
提前谢谢了.
任何解决方案都需要在"类似Windows的"环境中运行的DLL与您的Linux应用程序之间的基于TCP/IP的"远程处理"层.
您需要编写一个简单的PC应用程序来公开DLL函数,使用自制程序协议,或者XML-RPC,SOAP或JSON协议.该的RemObjects SDK可以帮助你-但可能是矫枉过正.
我坚持使用"真正的"或虚拟化的PC.如果您使用Wine,DLL开发人员不太可能提供任何支持.
MONO也不太可能有任何帮助,因为你的DLL可能不是.NET程序集.
虽然这个问题相当陈旧,但这个话题显然没有失去意义.如果您可以使用或正在使用Python ......这是我的解决方案.
我写了一个小的Python模块,用于在Linux上从Python调用Windows DLL.它基于IPC在常规Linux/Unix Python进程和基于Wine的Python进程之间.因为我自己在太多不同的用例/场景中需要它,所以我将其设计为"通用" ctypes
模块直接替换,它在后台自动完成大部分所需的管道.
示例:假设您在Linux上使用Python,您已安装Wine,并且您想要调用msvcrt.dll
(Microsoft C运行时库).您可以执行以下操作:
import zugbruecke as ctypes dll_pow = ctypes.cdll.msvcrt.pow dll_pow.argtypes = (ctypes.c_double, ctypes.c_double) dll_pow.restype = ctypes.c_double print('You should expect "1024.0" to show up here: "%.1f".' % dll_pow(2.0, 10.0))
源代码(LGPL),PyPI包和文档.
它的边缘仍然有点粗糙(即alpha和不安全),但它确实处理大多数类型的参数(包括指针).