use*_*616 7 .net python dll class python.net
我有一些.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)
据我了解,您想在 python 代码中使用 .NET 类。我对 C# 及其工作方式也不是很熟悉,但如果我理解正确,它可以用通用中间语言编译成 DLL。CIL是由微软发明的公共语言基础设施定义的编程语言,也是.NET框架的基础。要阅读 CIL,您必须使用公共语言运行时,它基本上是一个机器可读字节代码的即时编译器。我认为这就是您问题的解决方案。要使用 DLL 中定义的类(希望包含 CIL 中的类),您将需要一个将 CIL 映射到 Python 字节代码的 CLR!IronPython 有这样一个 CLR 映射器。然而,可以使用与纯 Python 一起工作的 CLR,通常这些映射器只能是一种方式(我使用的方式)。如果您需要使用需要 CIL/.NET 对象的函数,您将需要一个能够以两种方式在 CIL 和 Python 对象之间进行转换的 CLR。
我希望这对您有所帮助。如果您需要更多信息,我建议您查看有关 IronPython 的 .NET 集成的文档,如上所述。