Tôi có một tập tin .dll hữu ích với các lớp được thiết kế để điều khiển thiết bị bên ngoài được kết nối với máy tính để bàn của tôi qua ethernet. Tôi muốn nhập các lớp này vào python và sử dụng các hàm/biến thành viên của chúng, v.v. để điều khiển thiết bị.cách truy cập một lớp từ một dll trong python?
Tôi đã xem xét một số tùy chọn bao gồm:
-tyty (có vẻ hoạt động tốt cho các chức năng chứ không phải lớp). Ở đây "DotNet \ Aerotech.Ensemble.dll" là thư viện dll của tôi và "Mạng" là một lớp trong thư viện đó có chức năng thành viên "Kết nối". Tải thư viện, nhưng tôi không thể truy cập vào các lớp ...
>>> 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 cho Net nhưng dường như là ngôn ngữ riêng biệt hoàn toàn và tôi muốn để có thể làm tất cả mọi thứ từ một nơi (python).
-SWIG. Tài liệu SWIG dường như chỉ ra rằng nó có thể xử lý các lớp nhập khẩu, nhưng cũng có vẻ như yêu cầu mã C++ và các tệp tiêu đề (mà tôi không có) được gói để sử dụng như một mô-đun python.
Tôi là người mới bắt đầu và khá lạc lối ở đây nên mọi trợ giúp đều được đánh giá cao!
EDIT:
@SvenMarnach: Tôi đã có một cái nhìn tại IronPython và đã có thể có được nó làm việc với các tập tin dll của tôi, nhưng tôi muốn làm điều này trong Python vì tôi đã làm rất nhiều thứ bằng ngôn ngữ đó. Tôi muốn tích hợp các chức năng dll hoặc các lớp hoặc bất cứ điều gì vào các chương trình python hiện có.
Khi nhận IronPython hoạt động, tuy nhiên, tôi đã vấp phải Python for .NET để xác nhận có khả năng cài đặt .Net nhận thức cho cài đặt python hiện có ... Tác vụ này (nghĩa là tôi có thể truy cập tệp dll và điều khiển thiết bị của mình) sử dụng nó trong thư mục mà tôi đã tải về python cho các tệp .NET, nhưng nếu tôi thử nó trong một số thư mục khác (nhớ để chắp thêm thư mục python.net vào sys.path), bạn sẽ gặp lỗi ImportError: dynamic module does not define init function (initclr)
Theo như tôi biết, các tệp DLL không được "chứa các lớp". Chúng có thể chứa các hàm, và các trình biên dịch sẽ mangle các tên phương thức để đặt tên các hàm trước khi đưa chúng vào một DLL. Vì vậy, điều này hoàn toàn phụ thuộc vào ngôn ngữ các DLL được thực hiện. (Disclaimer: Tôi không quen với .NET và nền tảng Windows.) –
Điều này có thể không có liên quan, nhưng khá thường xuyên dotnet "dlls" không thực sự nhị phân biên dịch dlls , chúng là C# bytecode với phần mở rộng dll. – aquavitae
http: // stackoverflow.com/questions/2082159/how-to-export-c-sharp-phương pháp – cons0ul