在 Ubuntu 上用 python 导入 dll
我在安装了 Ubuntu 的服务器上使用 python 2.6.5。
我需要为我们的应用程序集成一个 API,在这种情况下,我需要使用 API 提供商提供给我的 DLL。他们关于 api 集成的代码示例是用 Visual Basic 编写的...我在 google 上进行了搜索,找到了一些使用 ctypes
的示例,我尝试使用 cdll
和 < code>pydll,这导致了以下错误...
OSError:/home//some.dll:无效的 ELF 标头
一种可能性是使用 IronPython,但我没有太多关于 IronPython 的信息,所以我不确定它是否能完全满足我的需求..
是否有任何可用的模块可以让我在python上使用该dll(或者我在现有的dll中缺少的东西)。我的python版本很难升级?
I am using python 2.6.5 on an Ubuntu intalled server.
I need to integrate an API for our applicaion, in that case, i needed to use a DLL given to me by the API provider. Their example of code about api integration is written in Visual Basic... I made a search on google and found some examples of using ctypes
, and i try using cdll
and pydll
, which caused the following error...
OSError: /home//some.dll: invalid ELF header
One possibility is using IronPython, but i do not have much information about ironpython so i am not sure if it will handle my needs completely..
Is there any available module that let me use that dll on python (or aynthing that i am missing from the exixting ones). It is hard to upgrade my python version?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
DLL 可能是 Windows 生物,但如果 DLL 是“纯 .NET”并且不利用特定于 Windows 等的可执行文件,那么它通常可以通过 Mono 在 Linux 中工作。 (单声道 ipy.exe)。
Ironpython 的系统和类似的 Windows 模块被定制为与操作系统无关(未经测试的程度)。
我已经在 Ubuntu 中成功运行了 NHibernate、FluentNHibernate、log4net 和其他一些常用的 DLL。
关键似乎是以这种方式导入 DLL。例如,如果一个 dll 导入另一个 dll(Fluentnhibernate 导入 nhibernate),则不需要导入 Nhibernate。
DLLs may be windows creatures, but if a DLL is 'pure .NET' and doesn't utilize executables specific to windows etc., then it can work often in Linux, through Mono. (mono ipy.exe).
Ironpython's System and similiar windows modules are customized to be os agnostic (to a untested degree).
I have successfully run NHibernate, FluentNHibernate, log4net, and a few other commonly used DLLS in Ubuntu.
The key seems to be to import DLLs in this fashion. If a dll imports another (fluentnhibernate imports nhibernate), you don't need to import Nhibernate for example.
首先,检查您的 DLL 是否是 .NET 程序集文件。 “汇编 DLL 文件”与汇编程序无关。这只是 .NET 框架将其字节码存储在 DLL 文件中的一种方式!
在 Linux 中执行
文件library.dll
。如果它说这样的话:那么你很幸运:它是一个程序集文件。您可以在 Linux 上运行它。
安装单声道。安装 Python.NET。忘记 IronPython:它已经死了。
现在,在 Python.NET 中,您可以执行此操作:
但是您如何知道要导入什么?
自动完成。
或者使用
monop
工具来检查 DLL,如下所示:它会告诉您有关该库的所有信息
First, check if your DLL is a .NET Assembly file. An "Assembly DLL file" has nothing to do with the assembler. It's simply a way the .NET framework stores its bytecode inside a DLL file!
Do
file library.dll
in Linux. If it says something like this:then you're lucky: it's an assembly file. You can run it on Linux.
Install Mono. Install Python.NET. Forget IronPython: it's dead.
Now, in Python.NET, you can do this:
but how do you know what to import?
Auto-complete.
Or use
monop
tool to inspect the DLL like this:and it will tell you everything about that library
DLL 是Windows 的产物。使用 DLL 的唯一方法是使用 Windows 版本的 Python。通过将 Windows 安装在 虚拟机 中,您将能够在 Ubuntu 上运行 Windows Python。您还可以使用 Wine 运行它。
当然,另一种方法是询问您的 API 提供商是否有 Linux 版本的 API。
DLLs are Windows creatures. The only way you'll be able to use a DLL is by using a Windows build of Python. You'll be able to run Windows Python on Ubuntu by having Windows installed inside a virtual machine. You also might be able to run it using Wine.
An alternative, of course, is to ask your API provider if they have a Linux version of the API.