python获取dll的类_如何从python中的dll访问类?

我有一大堆.dll文件,这些文件的类是用来控制通过以太网连接到桌面的外部设备。我想将这些类导入python并使用它们的成员函数/变量等来控制设备。在

我研究了许多选项,包括:

-ctypes(似乎对函数有效,但对类无效)。这里是“DotNet”\Aerotech.Ensemble.dll是我的dll库,而“Network”是该库中一个具有成员函数“Connect”的类。库已加载,但我无法访问该类。。。在>>> from ctypes import *

>>> lib = cdll.LoadLibrary('DotNet\Aerotech.Ensemble.dll')

>>> lib.Network.Connect()

Traceback (most recent call last):

File "", line 1, in

File "C:\Python26\lib\ctypes\__init__.py", line 366, in __getattr__

func = self.__getitem__(name)

File "C:\Python26\lib\ctypes\__init__.py", line 371, in __getitem__

func = self._FuncPtr((name_or_ordinal, self))

AttributeError: function 'Network' not found

-IronPython/Python for.Net,但它们似乎是完全不同的语言,我希望能够从一个地方(Python)完成所有事情。在

-喝。SWIG文档似乎表明它可以处理导入类,但似乎也需要C++代码和头文件(我不需要)被包装为Python模块。在

我是一个初学者,在这里相当迷路,所以任何帮助都是感激的!在

编辑:

@SvenMarnach:我看了一下IronPython,可以用dll文件来处理它,但是我想用Python来实现,因为我已经用这种语言做了很多事情。我想将这些dll函数或类或其他任何东西集成到现有的python程序中。在

然而,在让IronPython正常工作的过程中,我偶然发现了accross Python for .NET,它声称能够将.Net感知安装到现有的python安装中……如果我在我下载python for.Net文件的目录中使用它,它就可以工作了(即我可以访问dll文件并控制我的设备),但是如果我在其他目录中尝试(记住要附加python.net直飞搜索路径),则出现错误ImportError: dynamic module does not define init function (initclr)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python DLL 是通过使用 ctypes 或 cffi 等模块来调用在 C 或 C++ 编写的动态链接库。而在 Python DLL 导出的,可以作为一个模块调用或者在其他 Python 脚本实例化使用。 在 C 或者 C++ ,我们可以使用导出函数的方式来将导出为 DLL 的函数。在 Python ,我们可以使用 ctypes 模块来加载 DLL,并且使用函数指针方式来访问导出的。 首先,我们需要得到 DLL 文件的路径,并使用 ctypes 的 cdll 或者 WinDLL 函数加载 DLL。然后,使用 ctypes 的 POINTER 函数来创建指向的指针型。接着,我们可以使用 getattr 函数来获取 DLL 导出的函数,并将其转换为 Python 的函数。最后,我们使用指针来实例化导出的,并调用其的方法。 以下是一个示例代码: ```python import ctypes # 加载 DLLdll = ctypes.WinDLL('example.dll') # 创建指向的指针型 ClassPtr = ctypes.POINTER(ctypes.c_void_p) # 获取 DLL 导出的函数 get_class = getattr(dll, 'get_class') get_class.restype = ClassPtr # 实例化导出的 c = get_class() # 调用的方法 # 假设导出有一个名为 foo 的函数 foo = getattr(dll, 'foo') foo.argtypes = [ClassPtr] foo.restype = ctypes.c_void_p result = foo(c) ``` 通过以上方法,我们就能够在 Python 调用通过 DLL 导出的了。当然,在实际应用,我们需要根据实际情况进行相应的参数配置和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值