Tôi đã tạo một dll bằng C#. Làm thế nào để sử dụng dll trong IronPython. Tôi đã cố gắng để thêm dll bằng cách sử dụng clr.AddReference ("yxz.dll"). Nhưng nó không thành công. Tôi đã thử đặt dll trong thư mục thực hiện của kịch bản IronPython. Tuy nhiên nó thất bại nói rằng "Tên xyz không thể được tìm thấy" trong khi cố gắng để tham khảo các dll.Cách sử dụng C# dll trong IronPython
Trả lời
Tôi nghĩ rằng nó không tìm thấy tệp vì nó không biết phải tìm kiếm ở đâu, xem here để có giải thích chi tiết về cách hoạt động của hàm clr.AddReference ...().
Ví dụ Creating .NET Classes Dynamically from IronPython, tạo một hội đồng (sau này được lưu vào đĩa dưới dạng "DynamicAsm.dll"). Nó chứa một lớp được gọi là "DynamicType
", với một phương pháp tĩnh duy nhất được gọi là 'test
'. Phương thức này lấy bốn số nguyên và cộng chúng lại với nhau.
The nice thing is that this saves "DynamicAsm.dll" to disk. You can then start an IronPython interactive interpreter session and do the following :
>>> import clr
>>> clr.AddReference('DynamicAsm.dll')
>>> import DynamicType
>>> DynamicType.test(2, 3, 4, 5)
14
Lưu ý rằng ví dụ sử dụng tên lớp trong báo cáo import
.
sử dụng 'import sys print sys.path' để xác định nơi clr.AddReference đang tìm kiếm dlls – mydogisbox
Tôi có thể thực sự làm điều này từ bên ngoài không? Hoặc tôi thực sự phải nhập khẩu clr và thêm tham chiếu đến lắp ráp trong kịch bản IronPython của tôi? Tôi đã có một số hội đồng ở đây mà tôi muốn nhập khẩu tĩnh để họ luôn luôn có sẵn trong kịch bản. –
import clr
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll")
là cách đơn giản nhất theo đề xuất của Jeff trong phần nhận xét. Điều này cũng hoạt động:
import clr
import sys
sys.path.append(r"C:\Folder\Subfolder") # path of dll
clr.AddReference ("Ipytest.dll") # the dll
import TestNamspace # import namespace from Ipytest.dll
Bạn cũng có thể sử dụng 'clr.AddReferenceToFileAndPath', thực hiện chính xác điều đó. –
Tôi chỉ nhận được hành vi này từ bảng điều khiển IronPython. Khi tôi chạy một kịch bản nó là tốt. Khi tôi chạy một kịch bản lệnh IronPython, 'sys.path' chứa một đường dẫn tuyệt đối tới thư mục làm việc hiện tại của tôi để nó hoạt động. Khi tôi gõ vào giao diện điều khiển, 'sys.path' chỉ bao gồm một' '.'' cho thư mục làm việc hiện tại. Điều đó có thể giải thích sự khác biệt trong hành vi. –
Tôi đã thử điều này, nhưng nhận được một lỗi: AttributeError: 'module' đối tượng không có thuộc tính 'AddReferenceToFileAndPath' – Avis
Bạn có thể sử dụng này:
import clr
clr.AddReferenceToFile("yxz.dll")
Nó tốt hơn để sử dụng clr.AddReferenceToFile (filename), bởi vì nó có một đường dẫn tương đối.
import clr
clr.AddReferenceToFile("xxx.dll")
Sau đó, bạn có thể nhập các lớp của nhập khẩu như bình thường:
import xxx
hoặc
from xxx import *
tôi khuyên bạn nên kiểm tra cuốn sách này, nó rất hữu ích. https://play.google.com/store/apps/details?id=com.gavin.gbook
AddReferenceToFileAndPath cũng làm việc với đường dẫn thư mục tương đối, fwiw. – EdwardGarson
Tôi chỉ nhận được hành vi này từ bảng điều khiển IronPython. Khi tôi chạy một kịch bản nó là tốt. Khi tôi chạy một kịch bản lệnh IronPython, sys.path chứa một đường dẫn tuyệt đối tới thư mục làm việc hiện tại của tôi để nó hoạt động. Khi tôi gõ vào giao diện điều khiển, sys.path chỉ bao gồm một '.' cho thư mục làm việc hiện tại. Điều đó có thể giải thích sự khác biệt trong hành vi.
Là một chút của một giải pháp hacky, tôi đã tạo ra một tập tin fixpath.py
"""This hacky script fixes the sys.path when I run the ipy console."""
import sys
import os
sys.path.insert(0, os.getcwd())
del sys
del os
Sau đó, tôi thiết lập một môi trường biến IRONPYTHONSTARTUP với đường dẫn tuyệt đối đến tập tin này. Sau đó, bất cứ khi nào tôi bắt đầu giao diện điều khiển IronPython, tập lệnh này được chạy và sys.path
của tôi bao gồm tham chiếu tuyệt đối đến thư mục làm việc hiện tại của tôi và các cuộc gọi tiếp theo đến clr.AddReference
hoạt động bình thường.
- 1. Không thể sử dụng DateTime trong IronPython
- 2. Cách tạo DLL sẽ được sử dụng trong C#
- 3. Cách tạo C# DLL để sử dụng trong PHP
- 4. nhập đun Python qua C# .NET sử dụng IronPython
- 5. sử dụng C# dll trong dự án C++
- 6. Sử dụng Visual C++ DLL trong Borland C cũ?
- 7. Tôi nên sử dụng IronPython IDE nào?
- 8. Làm thế nào để sử dụng C# dll trong vC++?
- 9. Biên dịch mã IronPython thành EXE hoặc DLL
- 10. Cách sử dụng IronPython với Visual Studio 2008
- 11. Sử dụng một DLL có tiêu đề .h trong C++
- 12. Sử dụng .dll trong Visual Studio 2010 C++
- 13. Sử dụng dll C++ được quản lý từ C#
- 14. C# .dll trong ứng dụng Android
- 15. Bắt ngoại lệ Ironpython trong C#
- 16. Sử dụng các tệp DLL trong VBScript
- 17. Làm thế nào để sử dụng IronRuby hoặc IronPython cùng với C# trong Web/Windows Form?
- 18. Tương đương với khối C# "đang sử dụng" trong IronPython là gì?
- 19. Làm cách nào để sử dụng hình ảnh trong shell32.dll trong dự án C#?
- 20. Làm thế nào để tải một dll C# trong python?
- 21. Đa luồng trong IronPython
- 22. IronPython trên Xamarin
- 23. Chuyển (không được quản lý) C++ sang C# so với sử dụng C++ dưới dạng DLL trong ứng dụng C#
- 24. IronPython Kiểm tra đơn vị trên C#
- 25. Làm thế nào để sử dụng IronPython với App.Config?
- 26. Sử dụng sqlite3 với IronPython 2.6 cho .Net4
- 27. ký tự utf khi sử dụng FindWindow user32.dll trong C# ứng dụng
- 28. Có ai đã sử dụng SciPy với IronPython không?
- 29. Không thể đăng ký DLL bằng cách sử dụng WiX
- 30. Truy cập các thành viên lớp C# trong IronPython
Điều gì sẽ xảy ra nếu bạn thay đổi dòng thành clr.AddReference ("yxz"), điều đó có tạo nên sự khác biệt nào không? –
Nếu vấn đề là DLL không thể được tìm thấy, sử dụng Process Monitor bởi Sysinternals để xác định những gì sai. –
fuslogvw.exe cũng là một cách tốt để tìm ra lý do tại sao một DLL quản lý không tìm thấy - nó đến w/nền tảng SDK. –