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