dll - 从 Linux 使用 Windows DLL

标签 dll linux api

我们需要连接到第 3 方应用程序,但该应用程序背后的公司没有公开消息协议(protocol),只提供了要连接的 Windows DLL。

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

您是否知道任何允许从 Linux 上的 C 应用程序调用 Windows DDL 函数的解决方案?它可以使用 Wine 或单独的 Windows PC - 没关系。

非常感谢。

最佳答案

我编写了一个小型 Python 模块,用于从 Linux 上的 Python 调用 Windows DLL。它基于常规 Linux/Unix Python 进程和基于 Wine 的 Python 进程之间的 IPC。因为我自己在太多不同的用例/场景中需要它,所以我将它设计为“通用”ctypes module直接替换,在后台自动完成大部分所需的管道。

示例:假设您在 Linux 上使用 Python,安装了 Wine,并且想要调用 msvcrt.dll(Microsoft C 运行时库)。您可以执行以下操作:

from zugbruecke import 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))

Source code (LGPL) , PyPI package & documentation .

它的边缘仍然有点粗糙(即 alpha 和不安全),但它确实可以处理大多数类型的参数(包括指针)。

关于dll - 从 Linux 使用 Windows DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/374157/

相关文章:

php - cURL 请求(使用 Stripe API)会减慢页面加载时间 - 发出请求的最佳方式?

c++ - 在给定名称和签名的情况下调用共享库中的函数

linux - Sed - 删除所有脚本标签

linux - bash ping ip 回复时运行命令

ruby-on-rails - Rails JSON 响应问题

javascript - 即使值是数字,也会收到 "InvalidValueError: setCenter: not a LatLng or LatLngLiteral: in property lng: not a number"错误

ASP.NET MVC 入口点

c# - ILMerge 的问题

使用 inpout32.dll 的 Java I/O

linux - 用于 behat 错误的 ant 构建脚本