He creado un dll usando C#. ¿Cómo se usa el dll en IronPython? Intenté agregar el dll utilizando clr.AddReference ("yxz.dll"). Pero falla. Intenté ubicar el dll en el directorio de ejecución del script de IronPython. Todavía falla diciendo que "Name xyz no se puede encontrar" al intentar referir el dll.Cómo usar un dll C# en IronPython
Respuesta
Creo que no está encontrando el archivo porque no sabe dónde buscarlo, vea here para obtener una explicación detallada de cómo funcionan las funciones clr.AddReference ...().
El ejemplo Creating .NET Classes Dynamically from IronPython, crea un conjunto (que luego se guarda en el disco como "DynamicAsm.dll"). Contiene una clase llamada "DynamicType
", con un único método estático llamado 'test
'. Este método toma cuatro enteros y los suma.
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
Tenga en cuenta que el ejemplo se utiliza el nombre de clase en la declaración import
.
use 'import sys print sys.path' para determinar dónde clr.AddReference está buscando dlls – mydogisbox
¿Puedo hacer esto desde el exterior? ¿O realmente tengo que importar clr y agregar la referencia al ensamblaje en mi script de IronPython? Tengo algunas asambleas aquí que me gustaría haber importado estáticamente para que estén siempre disponibles en el guión. –
import clr
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll")
es la forma más sencilla propuesta por Jeff en los comentarios. Esto también funciona:
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
También puede usar 'clr.AddReferenceToFileAndPath', que hace exactamente eso. –
Obtengo este comportamiento solo desde la consola de IronPython. Cuando ejecuto un script, está bien. Cuando ejecuto un script, IronPython, 'sys.path' contiene una ruta absoluta a mi directorio de trabajo actual para que funcione. Cuando escribo en la consola, 'sys.path' solo incluye un' '.'' para el directorio de trabajo actual. Eso puede explicar la diferencia en el comportamiento. –
Intenté esto, pero obteniendo un error: AttributeError: el objeto 'module' no tiene ningún atributo 'AddReferenceToFileAndPath' – Avis
Puede utilizar esta:
import clr
clr.AddReferenceToFile("yxz.dll")
Es mejor utilizar clr.AddReferenceToFile (nombre de archivo), ya que toma una ruta relativa.
import clr
clr.AddReferenceToFile("xxx.dll")
A continuación, puede importar las clases de importación como de costumbre:
import xxx
o
from xxx import *
le recomiendo que echa un vistazo a este libro, es muy útil. https://play.google.com/store/apps/details?id=com.gavin.gbook
AddReferenceToFileAndPath también funciona con rutas de directorio relativas, fwiw. – EdwardGarson
Obtuve este comportamiento solo desde la consola de IronPython. Cuando ejecuto un script, está bien. Cuando ejecuto un script, IronPython, sys.path contiene una ruta absoluta a mi directorio de trabajo actual para que funcione. Cuando escribo en la consola, sys.path solo incluye un '.' para el directorio de trabajo actual. Eso puede explicar la diferencia en el comportamiento.
como un poco de una solución hacky, he creado un archivo 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
A continuación, se configura un entorno IRONPYTHONSTARTUP variable con el camino absoluto a este archivo. Entonces cada vez que inicio mi consola IronPython, este script se ejecuta y mi sys.path
incluye una referencia absoluta a mi directorio de trabajo actual y las llamadas subsiguientes al clr.AddReference
funcionan correctamente.
- 1. Cómo usar C# Dll en vC++?
- 2. ¿Cómo usar IronPython con App.Config?
- 3. Cómo cargar un dll de C# en python?
- 4. Cómo usar IPython con IronPython
- 5. Incrustar IronPython en C#
- 6. Compilación de un código IronPython a EXE o DLL
- 7. Usar DLL en C sin lib
- 8. ¿Qué IronPython IDE debería usar?
- 9. ¿Cómo puedo usar un dll C# (managed) que no tengo?
- 10. Cómo usar IronPython con Visual Studio 2008
- 11. ¿Cómo se implementa una interfaz en IronPython?
- 12. Integración de C#, F #, IronPython e IronRuby
- 13. Cómo crear DLL C# para usar en PHP
- 14. Cómo usar COM dll en mi programa C++
- 15. ¿Usar DLL en PHP?
- 16. ¿Cómo creo un servicio web en IronPython?
- 17. IronPython en Unity3D
- 18. C++ enganchando un dll?
- 19. ¿Cómo usar una clase en DLL?
- 20. Compilar un proyecto C# en un dll
- 21. ¿Cómo puedo documentar un C# dll
- 22. Asignación de un método IronPython a un C# delegado
- 23. Cómo crear DLL ActiveX en Visual C++
- 24. Incrustar dll no administrado en un C# dll administrado
- 25. C#/IronPython Interop con biblioteca de clases de C# compartida
- 26. ¿Cómo usar IronRuby o IronPython junto con C# en Web/Windows Form?
- 27. Captura de excepción de Ironpython en C#
- 28. crear un archivo dll en C#
- 29. Código de ejemplo de integración de C++ \ IronPython?
- 30. cómo acceder a una clase desde un dll en python?
¿Qué sucede si cambia la línea a clr.AddReference ("yxz"), ¿hace alguna diferencia? –
Si el problema es que no se puede encontrar el archivo DLL, use Process Monitor de Sysinternals para identificar el problema. –
fuslogvw.exe también es una buena manera de descubrir por qué no se encuentra una DLL administrada; se trata de la plataforma SDK. –