我有一些 .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
-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)