Exporte un punto de entrada para un dll de C#: ¿hay algo como __declspec (dllexport)? [cerrado]

Tengo un C# .dll que interactúa con la API de un gran programa externo.

Ese programa espera una función de punto de entrada en el dll con la forma:

extern void entrypoint(
char * a,
int * b,
int c);

No encuentra esto y se queja.

El punto de entrada original/predeterminado para mi dll es solo:

public static void Main(string[] args)

He intentado crear una función como

public static void entrypoint(char a, int b, int c)

Pero obviamente no es tan simple. He visto un montón de cosas sobre cómo hacer esto en C++ con __declspec(dllexport), y he visto algunas soluciones complejas/piratas para C#, pero parece que debería haber una forma sencilla de hacerlo. ¿Algunas ideas?

preguntado el 02 de julio de 12 a las 18:07

¿Intenta llamar a un método desde ac # dll (ensamblado) desde c? En caso afirmativo, no es posible (de una manera fácil, sin alojar .net en su aplicación c o com) -

@HansPassant Sí, es cierto que similar a esas preguntas, pero esperaba que algo hubiera cambiado en dos años o que hubiera una manera elegante de hacerlo sin toneladas de siglas y utilidades de línea de comando y demás. -

1 Respuestas

Si su sistema externo está basado en COM, hay formas de hacerlo, ya que .NET es un objeto COM oculto.

Erick

Respondido 02 Jul 12, 21:07

@TomNysetvold: Esta "respuesta" realmente no dice mucho. Las personas que vienen aquí porque la pregunta tiene una respuesta aceptada pueden sentirse decepcionadas. - Robert Harvey

Sí, al final, el sistema externo arrojaba un error al dar el nombre del método que necesitaba en una extensión C; Descubrí en un código de muestra que el nombre del método que realmente necesitaba en una extensión de C# era otra cosa, y una vez que lo arreglé, funcionó. - tomnysetvold

@RobertHarvey Ver mi comentario. Resultó que, después de todo, parecía ser un sistema COM o .NET. Simplemente me estaba dando un mensaje de error inapropiado, y tan pronto como cambié el nombre del método al correcto (que se encuentra en un código de muestra oscuro) funcionó, así que realmente esta era la respuesta correcta. - tomnysetvold

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.