2012-04-26 12 views
6

Sto cercando di creare un'integrazione tra un programma basato su Lisp di terze parti (chiamiamolo ABC) e un programma C# che ho scritto io stesso (chiamiamolo DEF). Il problema è che ABC può solo chiamare assembly creati in C o Fortran. Così ho iniziato ad imparare C, e ho fatto il test "ciao mondo" per lavorare, dove l'ABC chiama la mia C dll e in cambio riceve "Ciao mondo". Ho provato a chiamare la mia DLL DEF dal codice C utilizzando il caricamento esplicito e GetProcAddress. Ha funzionato se ho chiamato un altro C dll, ma non un C# dll. ora mi chiedo se devo imparare il C++ e chiamare C# da C++ per creare questa bella catena di chiamate:Come chiamo metodi in una DLL C# dal mio codice C?

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

Se questo è l'unico modo, qualcuno può aiutarmi con alcuni esempi ecc?

+1

Hai registrato la tua C# dll per l'interoperabilità COM? L'ho fatto in passato, è possibile. – SouthShoreAK

+0

Non dimenticare di contrassegnare la risposta alla domanda se lo è (controllare il gancio sotto il pulsante di diminuzione della risposta). – sschrass

risposta

2

Utilizzare this project per esportare le funzioni C# come punti di ingresso nativi.

+0

A dire il vero ho funzionato, grazie mille! – AndersJH

3

Quando si crea un assieme .NET, è possibile impostare una casella di controllo in modo che l'assembly sia registrato per l'interoperabilità COM. Ciò ti consentirà di accedervi da da qualsiasi lingua che possa chiamare COM. (C non può essere? È passato molto tempo da da quando ho toccato C o C++.)

Proprietà di configurazione -> Crea pagina delle proprietà del progetto. Cercare "Register for COM Interop".

+0

Questo non ha funzionato. C ancora non riesce a trovare l'indirizzo della procedura nella DLL. – AndersJH