Tengo una tarea simple:¿Cómo usar un ensamblado .Net en Delphi sin registrarlo en GAC o COM?
es posible escribir un archivo DLL de Delphi y poner un .NET Assembly (con solo una interfaz con 4 métodos y una clase implementando la interfaz) además de llamarlo desde la DLL de Delphi ?
Es decir, ¿puedo importar los tipos de .Net directamente desde el ensamblado .Net (nombre de archivo relativo) si creo un tlb y una unidad delphi para el tlb, sin registrar el ensamblado/tlb?
mejor, thalm
EDITAR (lo que encontré):
mayoría de las soluciones deben registrarse al menos una DLL/TLB para COM. Pero lo más prometedor que encontré fue: Unmanaged Exports de Robert Giesecke, es una plantilla de proyecto de Visual Studio que le permite escribir C# estática (o cualquier lenguaje .NET) métodos y llamarlos desde cualquier lenguaje no administrado, impresionante:
class Test
{
[DllExport("add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
EDIT 2: ¡Realmente funciona! ¡Incluso puedes controlar el tipo de clasificación, increíble!
Buen hallazgo de hack +1. Casi inmediatamente tuvo sentido una vez que recordó que el encabezado .Net es solo una extensión del formato COFF. Tengo un excelente artículo con detalles de las ubicaciones de .Net pero no puedo encontrarlo ahora. Aquí hay una forma posiblemente mejor (no más simple) de hacerlo: http://www.codeproject.com/KB/cs/unmanagedtomanaged.aspx – user44298
cont. Otra utilidad útil que encontré gracias a la investigación de su solución que puede ser útil para los visitantes http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx – user44298
@ Ivo, esta es la forma más común de alojar el CLR y usar la interoperabilidad COM a través de mscoree para acceder a sus tipos. (No estoy seguro si incluso un artículo del proyecto de código es realmente útil para algo que ya está documentado en msdn http://msdn.microsoft.com/en-us/library/dd380850.aspx) Esto está perfectamente bien para muchos casos de uso, especialmente si quiere algo más que solo métodos y usa un lenguaje que tenga un buen manejo de COM como C++ o Delphi. Sin embargo, no te ayuda cuando tienes que tener una DLL "real". ;-) –