我有一个.dll文件与设计类的控制通过以太网连接到我的桌面的外部设备。我想导入这些类到python并使用它们的成员函数/变量等来控制设备。如何在python中从dll访问类?
我已经看过了许多选项,包括:
-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的对于.NET,但这些似乎完全是独立的语言,我希望能够从一个地方做的一切(蟒蛇)。
-SWIG。 SWIG文档似乎表明它可以处理导入类,但似乎还需要将C++代码和/或头文件(我没有)用作python模块进行打包。
我是一个初学者,在这里相当丢失,所以任何帮助表示赞赏!
编辑:
@SvenMarnach:我看了一下IronPython和能得到它与我的dll文件的工作,但我想这样做在的Python,因为我已经做了很多事情用那种语言。我想将这些dll函数或类或其他任何东西集成到现有的python程序中。但是,我偶然发现Python for .NET声称能够将.Net感知安装到现有的python安装中......如果我能够访问dll文件并控制我的设备,这种方法可行(即我可以访问dll文件并控制我的设备)在我下载python for .NET文件的目录中使用它,但是如果我在其他目录中尝试它(记住要将python.net目录添加到sys.path),则会出现错误ImportError: dynamic module does not define init function (initclr)
据我所知,DLLs不能“包含类”。它们可以包含函数,并且编译器在将函数名放入DLL之前会将方法名称转换为函数名。所以这完全取决于实现DLL的语言。(免责声明:我不熟悉.NET和Windows平台。) – 2012-03-19 13:58:01
这可能不相关,但很多时候dotnet“dll”实际上并不是二进制编译的dll ,它们是带有dll扩展名的c#字节码。 – aquavitae 2012-03-19 13:58:54
http:// stackoverflow。com/questions/2082159/how-to-export-c-sharp-methods – cons0ul 2012-03-19 14:59:50