2012-04-26 16 views
6

Ich versuche, eine Integration zwischen einem Lisp-basierten Programm von Drittanbietern (nennen wir es ABC) und einem C# -Programm, das ich selbst geschrieben habe (nennen wir es DEF), zu erstellen. Das Problem besteht darin, dass ABC nur Assemblys aufrufen kann, die in C oder Fortran erstellt wurden. So begann ich C zu lernen, und ich bekam den "Hallo Welt" -Test, wo ABC meine C dll anruft und "Hallo Welt" bekommt. Ich habe versucht, meine DEF-DLL aus dem C-Code mit expliziten Laden und GetProcAddress aufrufen. Es funktionierte, wenn ich eine andere C dll, aber keine C# dll anrief. Jetzt frage ich mich, wenn ich C lernen muss ++ und C# aus C++ rufen diese nette Call-Kette zu schaffen:Wie rufe ich Methoden in einer C# -Dll aus meinem C-Code?

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

Wenn das der einzige Weg ist, kann mir jemand mit einigen Beispielen helfen?

+1

Haben Sie Ihre C# DLL für COM Interop registriert? Ich habe es in der Vergangenheit gemacht, es ist möglich. – SouthShoreAK

+0

Vergessen Sie nicht, Ihre Frage zu markieren, wenn dies der Fall ist (klicken Sie auf den Haken unter der Antwort-Taste der Antwort). – sschrass

Antwort

2

Verwenden Sie this project, um C# -Funktionen als systemeigene Eingabepunkte zu exportieren.

+0

Ich habe das wirklich zur Arbeit gebracht, vielen Dank! – AndersJH

3

Wenn Sie eine .NET-Assembly erstellen, können Sie ein Kontrollkästchen aktivieren, damit die Assembly für COM-Interop registriert wird. Dadurch können Sie von jeder Sprache, die COM aufrufen kann, auf zugreifen. (C kann kann es nicht? Lange Zeit seit ich berührte C oder C++.)

Konfigurationseigenschaften -> Seite von Ihren Projekteigenschaften erstellen. Suchen Sie nach "Registrieren für COM Interop".

+0

Das hat nicht funktioniert. C kann die Prozeduradresse in der DLL immer noch nicht finden. – AndersJH

Verwandte Themen