Я создал dll с помощью C#. Как использовать DLL в IronPython. Я попытался добавить dll, используя clr.AddReference ("yxz.dll"). Но это терпит неудачу. Я попытался разместить dll в каталоге выполнения скрипта IronPython. Тем не менее он не заявляет, что «Имя xyz не может быть найдено» при попытке ссылаться на dll.Как использовать C# dll в IronPython
ответ
Я думаю, что это не удается найти файл, потому что он не знает, где его искать, см. here для подробного объяснения того, как работают функции clr.AddReference ...().
В примере Creating .NET Classes Dynamically from IronPython создается сборка (которая впоследствии сохраняется на диске как «DynamicAsm.dll»). Он содержит класс под названием «DynamicType
», с одним статическим методом «test
». Этот метод принимает четыре целых числа и объединяет их.
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
Обратите внимание, что в данном примере используется имя класса в import
заявлении.
использовать 'import sys print sys.path', чтобы определить, где clr.AddReference ищет dlls – mydogisbox
Могу ли я на самом деле делать это снаружи? Или мне действительно нужно импортировать clr и добавить ссылку на сборку в моем скрипте IronPython? У меня есть несколько сборок здесь, которые я бы хотел импортировать статически, чтобы они всегда были доступны в скрипте. –
import clr
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll")
- это самый простой способ, предложенный Джеффом в комментариях. Это также работает:
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
Вы также можете использовать 'clr.AddReferenceToFileAndPath', который делает именно это. –
Я получаю это поведение только от консоли IronPython. Когда я запускаю сценарий, все в порядке. Когда я запускаю скрипт, IronPython, 'sys.path' содержит абсолютный путь к моему текущему рабочему каталогу, так что он работает. Когда я вхожу в консоль, 'sys.path' включает только'..'' для текущего рабочего каталога. Это может объяснить разницу в поведении. –
Я пробовал это, но получаю сообщение об ошибке: AttributeError: объект 'module' не имеет атрибута 'AddReferenceToFileAndPath' – Avis
Вы можете использовать это:
import clr
clr.AddReferenceToFile("yxz.dll")
Это лучше использовать clr.AddReferenceToFile (имя файла), потому что он принимает относительный путь.
import clr
clr.AddReferenceToFile("xxx.dll")
Затем вы можете импортировать классы импорта как обычно:
import xxx
или
from xxx import *
Я рекомендую вам проверить эту книгу, это очень полезно. https://play.google.com/store/apps/details?id=com.gavin.gbook
AddReferenceToFileAndPath также работает с относительными путями каталогов, fwiw. – EdwardGarson
Я получил это поведение только с консоли IronPython. Когда я запускаю сценарий, все в порядке. Когда я запускаю скрипт, IronPython, sys.path содержит абсолютный путь к моему текущему рабочему каталогу, так что он работает. Когда я вхожу в консоль, sys.path включает только '.' для текущего рабочего каталога. Это может объяснить разницу в поведении.
Как немного в Hacky решение, я создал файл 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
Тогда я создать переменную окружения IRONPYTHONSTARTUP на абсолютный путь к этому файлу. Затем, когда я запускаю свою консоль IronPython, этот сценарий запускается, а мой sys.path
включает абсолютную ссылку на мой текущий рабочий каталог и последующие вызовы на clr.AddReference
.
- 1. загрузить C++ dll в ironpython
- 2. DLL загрузки (C#/IronPython/C#) в VS2012
- 3. Использовать IronPython для переопределения DLL-функции
- 4. Вызвать .dll-функцию из C# Ironpython
- 5. Как использовать DLL в C++
- 6. IronPython C# linkage
- 7. Как использовать dll C++ в C#
- 8. IronPython в PyCharm 3rd Party DLL
- 9. Импортировать файлы с точками имени C# dll в проблемах IronPython
- 10. Как использовать win32api от IronPython
- 11. Интерфейс C# в IronPython
- 12. Unity - Как использовать dll C++?
- 13. Как я могу использовать запросы с Ironpython?
- 14. Как использовать .NET API с IronPython?
- 15. Невозможно использовать DateTime в IronPython
- 16. Компиляция кода IronPython в EXE или DLL
- 17. Как загрузить C# dll в python?
- 18. Изменение информации о версии IronPython .dll сборки
- 19. Как использовать -X: Frames в Ironpython?
- 20. использовать riot dll в C#
- 21. Как использовать нос с IronPython?
- 22. Как использовать IPython с IronPython
- 23. Как использовать IronPython с App.Config?
- 24. Как использовать C библиотеки DLL ++ из C#
- 25. Как использовать AWS от IronPython
- 26. IronPython получить во внутренний класс от C# dll
- 27. Как использовать -X: Frames в C# 2.0 для загрузки ironpython?
- 28. Как использовать определенный интерфейс для объекта C# в IronPython
- 29. Выполнение IronPython в C#
- 30. Как использовать dll C++ в Unity3D?
Что произойдет, если вы измените строку на clr.AddReference ("yxz"), не имеет значения? –
Если проблема в том, что DLL не найдена, используйте Process Monitor от Sysinternals, чтобы определить, что не так. –
fuslogvw.exe также является хорошим способом выяснить, почему управляемая DLL не найдена - она приходит с платформой SDK. –