Stworzyłem dll przy użyciu C#. Jak korzystać z biblioteki dll w IronPython. Próbowałem dodać dll przy użyciu clr.AddReference ("yxz.dll"). Ale zawiedzie. Próbowałem umieścić plik dll w katalogu wykonawczym skryptu IronPython. Nadal nie powiedzie się, że "Nazwa xyz nie może zostać znaleziona" podczas próby skierowania biblioteki dll.Jak używać C# dll w IronPython
Odpowiedz
Myślę, że nie udało się znaleźć pliku, ponieważ nie wie, gdzie go szukać, zobacz here, aby uzyskać szczegółowe wyjaśnienie, jak działają funkcje clr.AddReference ...().
Przykład Creating .NET Classes Dynamically from IronPython tworzy zespół (który jest później zapisywany na dysku jako "DynamicAsm.dll"). Zawiera klasę o nazwie "DynamicType
", z pojedynczą statyczną metodą o nazwie "test
". Ta metoda pobiera cztery liczby całkowite i dodaje je razem.
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
Należy zauważyć, że przykład używa nazwy klasy w rachunku import
.
użyj 'import sys drukuj sys.ścieżka 'do określenia, gdzie clr.AddReference szuka bibliotek DLL – mydogisbox
Czy mogę to zrobić z zewnątrz? Czy naprawdę muszę zaimportować clr i dodać odniesienie do zestawu w moim skrypcie IronPython? Mam tutaj kilka złożeń, które chciałbym zaimportować statycznie, aby były zawsze dostępne w skrypcie. –
import clr
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll")
to najprostszy sposób zaproponowany przez Jeffa w komentarzach. Działa to również:
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
Możesz również użyć 'clr.AddReferenceToFileAndPath', która dokładnie to robi. –
Otrzymuję to zachowanie tylko z konsoli IronPython. Kiedy uruchamiam skrypt, wszystko jest w porządku. Kiedy uruchomię skrypt IronPython, 'sys.path' zawiera bezwzględną ścieżkę do mojego bieżącego katalogu roboczego, więc działa. Kiedy wpisuję konsolę, 'sys.path' zawiera tylko' '.'' dla bieżącego katalogu roboczego. To może wyjaśniać różnicę w zachowaniu. –
Próbowałem tego, ale otrzymuję błąd: AttributeError: obiekt 'module' nie ma atrybutu 'AddReferenceToFileAndPath' – Avis
Można to wykorzystać:
import clr
clr.AddReferenceToFile("yxz.dll")
Lepiej używać clr.AddReferenceToFile (filename), ponieważ zajmuje ścieżkę względną.
import clr
clr.AddReferenceToFile("xxx.dll")
Następnie można zaimportować zajęcia przez import jak zwykle:
import xxx
lub
from xxx import *
polecam sprawdzić tę książkę, to bardzo pomocne. https://play.google.com/store/apps/details?id=com.gavin.gbook
AddReferenceToFileAndPath działa również z względnymi ścieżkami katalogów, fwiw. – EdwardGarson
Mam to zachowanie tylko z konsoli IronPython. Kiedy uruchamiam skrypt, wszystko jest w porządku. Kiedy uruchomię skrypt IronPython, sys.path zawiera bezwzględną ścieżkę do mojego bieżącego katalogu roboczego, więc działa. Kiedy piszę w konsoli, sys.path zawiera tylko "." dla bieżącego katalogu roboczego. To może wyjaśniać różnicę w zachowaniu.
jako trochę hacky roztworu utworzonego pliku 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
Następnie założyć zmienną IRONPYTHONSTARTUP bezwzględną ścieżkę do tego pliku. Następnie za każdym razem, gdy uruchamiam konsolę IronPython, ten skrypt jest uruchamiany, a mój sys.path
zawiera bezwzględne odniesienie do mojego bieżącego katalogu roboczego i kolejne wywołania do clr.AddReference
działają poprawnie.
- 1. Jakiego IDE IronPython powinienem używać?
- 2. Jak używać IronPython z Visual Studio 2008
- 3. Jak używać COM dll w moim programie C++
- 4. Jak mogę używać biblioteki dll C# (managed), której nie mam?
- 5. Jak można używać C# DLL starszego prostu bez rejestracji (regsvr32)
- 6. Jak wywołać C++ DLL w C#
- 7. Uwierzytelnianie DLL w C#
- 8. SQLite.Interop.DLL Jak używać nie zarządzanego biblioteki DLL
- 9. Używanie NLTK w języku C# przez IronPython
- 10. C#/IronPython Interop i typ danych "float"
- 11. Jak wywołać funkcję DLL C++ z C#
- 12. Jak zarejestrować DLL DLL napisane w języku C# z Regsvr32?
- 13. Jak importować typy bez nazw w IronPython?
- 14. Przypisywanie metodę IronPython do C# delegata
- 15. Tworzenie instancji niestandardowych klas C# z IronPython
- 16. utworzyć plik DLL w C#
- 17. Zobacz komentarze dll w C#
- 18. Jak wyeksportować klasę C++ z biblioteki dll?
- 19. IronPython performance
- 20. IronPython w VisualStudio 2012
- 21. Wywoływanie C# dll w vbscript
- 22. Jak korzystać ze standardowej biblioteki w IronPython?
- 23. Przyszłość i stabilność IronPython
- 24. Jak utworzyć biblioteki DLL w programie Matlab i używać tych bibliotek DLL w aplikacjach .Net
- 25. Jak używać C struct z tablicy 2D w C# Jedności
- 26. Instalowanie pakietów Pythona - IronPython
- 27. Jak przekazać wyrażenie lambda do konstruktora C# ze skryptu IronPython?
- 28. Jak wywołać metody w C# dll z mojego kodu C?
- 29. Jak dodać C++ DLL w Windows Phone 8 (C#) ram
- 30. PyCharm & IronPython Codecompletion?
Co się stanie, jeśli zmienisz wiersz na clr.AddReference ("yxz"), czy to ma znaczenie? –
Jeśli problem polega na tym, że nie można znaleźć biblioteki DLL, użyj Monitora procesów Sysinternals, aby wskazać, co jest nie tak. –
fuslogvw.exe jest również dobrym sposobem, aby dowiedzieć się, dlaczego zarządzana biblioteka DLL nie została znaleziona - pochodzi z SDK platformy. –