当前位置:  开发笔记 > 编程语言 > 正文

使用Linux中的Windows DLL

如何解决《使用Linux中的WindowsDLL》经验,为你挑选了2个好方法。

我们需要与第三方应用程序接口,但应用程序背后的公司不会泄露消息协议,只提供Windows DLL接口.

我们的应用程序是基于Linux的,所以我不能直接与DLL通信.我找不到任何现有的解决方案,所以我正在考虑在Linux和Windows之间编写基于套接字的桥接器,但是我确信它不是一个独特的问题,而且之前应该有人做过.

你知道任何允许从Linux上的C app调用Windows DDL函数的解决方案吗?它可以使用Wine或单独的Windows PC - 无所谓.

提前谢谢了.



1> Roddy..:

任何解决方案都需要在"类似Windows的"环境中运行的DLL与您的Linux应用程序之间的基于TCP/IP的"远程处理"层.

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

我坚持使用"真正的"或虚拟化的PC.如果您使用Wine,DLL开发人员不太可能提供任何支持.

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



2> s-m-e..:

虽然这个问题相当陈旧,但这个话题显然没有失去意义.如果您可以使用或正在使用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和不安全),但它确实处理大多数类型的参数(包括指针).

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有