小编use*_*616的帖子

如何从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 "<stdin>", line 1, in <module>
  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
Run Code Online (Sandbox Code Playgroud)

-IronPython/Python for .Net但这些似乎完全是单独的语言,我希望能够从一个地方(python)做所有事情.

-SWIG.SWIG文档似乎表明它可以处理导入类,但似乎也需要包装C++代码和/或头文件(我没有)作为python模块使用.

我是初学者,在这里相当失落,所以任何帮助都表示赞赏!

编辑:

@SvenMarnach:我看过IronPython并且能够使用我的dll文件,但是我想用Python做这个,因为我已经用这种语言做了很多事情.我想将这些dll函数或类或任何东西集成到现有的python程序中.

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

.net python dll class python.net

7
推荐指数
1
解决办法
4355
查看次数

标签 统计

.net ×1

class ×1

dll ×1

python ×1

python.net ×1