2012-04-26 25 views
6

Estoy tratando de crear una integración entre un programa basado en Lisp de terceros (llamémoslo ABC) y un programa C# que he escrito yo mismo (llamémoslo DEF). El problema es que ABC solo puede llamar a ensamblados creados en C o Fortran. Así que comencé a aprender C, y obtuve el test de "hello world" para trabajar, donde ABC llama mi C dll y obtiene "hello world" a cambio. Intenté llamar a mi DEF dll desde el código C usando carga explícita y GetProcAddress. Funcionó si llamaba a otro C dll, pero no a un C# dll. Ahora me pregunto si debo aprender C++ y llamar a C# en C++ para crear esta bonita cadena de llamadas:¿Cómo invoco los métodos en un dll C# desde mi código C?

ABC -> C -> C++ -> DEF (C#) -> C++ -> C -> ABC

Si esa es la única forma, ¿alguien puede ayudarme con algunos ejemplos, etc.?

+1

¿Ha registrado su C# dll para COM interopera? Lo he hecho en el pasado, es posible. – SouthShoreAK

+0

No olvide marcar su pregunta si es así (verifique el enlace debajo del botón de respuesta negativa de la respuesta). – sschrass

Respuesta

2

Utilice this project para exportar las funciones de C# como puntos de entrada nativos.

+0

De hecho, esto funcionó, ¡muchas gracias! – AndersJH

3

Cuando crea un ensamblado .NET, puede establecer una casilla de verificación para tener el ensamblaje registrado para la interoperabilidad COM. Esto le permitirá acceder al desde cualquier idioma que pueda llamar a COM. (C no puede? Ha sido un largo tiempo desde que toqué C o C++.)

Propiedades de configuración -> Crear página de las propiedades de su proyecto. Busque "Registrarse para Interoperabilidad COM".

+0

Esto no funcionó. C todavía no puede encontrar la dirección del procedimiento en el dll. – AndersJH

Cuestiones relacionadas