在 Ubuntu 上用 python 导入 dll

发布于 2024-12-11 17:52:57 字数 459 浏览 0 评论 0原文

我在安装了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

番薯 2024-12-18 17:52:57

DLL 可能是 Windows 生物,但如果 DLL 是“纯 .NET”并且不利用特定于 Windows 等的可执行文件,那么它通常可以通过 Mono 在 Linux 中工作。 (单声道 ipy.exe)。

Ironpython 的系统和类似的 Windows 模块被定制为与操作系统无关(未经测试的程度)。

我已经在 Ubuntu 中成功运行了 NHibernate、FluentNHibernate、log4net 和其他一些常用的 DLL。

import clr
import sys
sys.path.append(os.path.abspath('./DLL')) #where your dlls are
clr.AddReference('System')
clr.AddReference('FluentNHibernate')
from FluentNHibernate.Cfg.Db import PostgreSQLConfiguration

关键似乎是以这种方式导入 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.

import clr
import sys
sys.path.append(os.path.abspath('./DLL')) #where your dlls are
clr.AddReference('System')
clr.AddReference('FluentNHibernate')
from FluentNHibernate.Cfg.Db import PostgreSQLConfiguration

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.

深居我梦 2024-12-18 17:52:57

首先,检查您的 DLL 是否是 .NET 程序集文件。 “汇编 DLL 文件”与汇编程序无关。这只是 .NET 框架将其字节码存储在 DLL 文件中的一种方式!

在 Linux 中执行文件library.dll。如果它说这样的话:

PE32 可执行文件 (DLL)(控制台)Intel 80386 Mono/.Net 程序集,适用于 MS Windows

那么你很幸运:它是一个程序集文件。您可以在 Linux 上运行它。

安装单声道。安装 Python.NET。忘记 IronPython:它已经死了。

现在,在 Python.NET 中,您可以执行此操作:

import clr
clr.AddReference('./library.dll')

# the library has just registered a namespace we can use

from LibraryName import *

但是您如何知道要导入什么?
自动完成。
或者使用 monop 工具来检查 DLL,如下所示:

$ monop -r library.dll

Assembly Information:
LibraryName
Version=9.9.3.0
Culture=neutral
PublicKeyToken=null

LibraryName.ClassName
...

$ monop -r library.dll LibraryName.ClassName
public class ClassName {

        public ClassName (string inputString);

        ...
}

它会告诉您有关该库的所有信息

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:

PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows

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:

import clr
clr.AddReference('./library.dll')

# the library has just registered a namespace we can use

from LibraryName import *

but how do you know what to import?
Auto-complete.
Or use monop tool to inspect the DLL like this:

$ monop -r library.dll

Assembly Information:
LibraryName
Version=9.9.3.0
Culture=neutral
PublicKeyToken=null

LibraryName.ClassName
...

$ monop -r library.dll LibraryName.ClassName
public class ClassName {

        public ClassName (string inputString);

        ...
}

and it will tell you everything about that library

少女七分熟 2024-12-18 17:52:57

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文