¿Es posible exportar funciones desde una DLL de C#como en VS C++?
notepad++ dllexport (4)
En VS C / C ++ puede usar la extern "C" __declspec(dllexport) -function declaration-
.
¿Cómo puedo lograr esto en un dll C #? ¿Hay un código C # equivalente al código anterior?
Editar: Más información
Estoy intentando crear un complemento para Notepad ++ y quiero usar C #, pero la forma más común que he visto hasta ahora es usar el código C ++ heredado con la llamada anterior para exportar algunas de las funciones que Notepad ++ espera importar y llamada. Hay una aplicación de ejemplo que usa C #, pero esto aún requiere una DLL de carga, que supongo que a partir de los comentarios / respuestas a continuación es la única forma de C #.
Exportaciones no gestionadas
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
¿Como funciona?
Cree una nueva biblioteca de clases o proceda con una existente. Luego agregue el paquete UnmanagedExports Nuget .
Esto es prácticamente toda la configuración que se requiere.
Ahora puede escribir cualquier tipo de método estático, decorarlo con
[DllExport]
y usarlo desde el código nativo.
Funciona igual que DllImport, por lo que puede personalizar el cálculo de parámetros / resultados conMarshalAsAttribute
.Durante la compilación, mi tarea modificará el IL para agregar las exportaciones requeridas ...
He visto a gente hacer esto antes, pero requería ildasm, agregando la directiva MSIL .export
y luego .export
montar. Un programa llamado dll_tool
puede hacer estos pasos por usted.
Si desea crear una DLL de modo mixto con exportaciones tanto nativas como administradas, debe utilizar C ++ / CLI, que está especialmente diseñado para este propósito.
No, no puedes hacer eso en el mismo sentido que lo haces en C y C ++.
Pero puede crear una API COM para lograr lo que luego puede usar en el código C y C ++.
Ver estos articulos
Sí, es posible exportar funciones desde un dll de C # de la misma manera que lo hace C ++. Necesita un poco de ayuda de un complemento de Exportaciones no gestionadas (DllExport para .Net) que facilite este proceso, o de un método similar como Exportar funciones en C # / VB.NET a código nativo .
Consulte el Código para exportar C # DLL a Metatrader Build 600+ para ver un ejemplo de uso de la plantilla de proyecto C # de Robert Giesecke para exportaciones no administradas para exportar un C # dll a una aplicación heredada (Metatrader) que tiene una gran similitud con C ++.
Además, puede ser interesante la compatibilidad entre nativos y .NET, aunque está principalmente orientada hacia el acceso al código nativo desde .NET y no al revés.