2009-04-24 4 views
1

Ich möchte von C# die folgende C++ Funktion (durch eine DLL exportiert) aufzurufen:Rangierung Referenz-Typen von C++ zu C#

void createVm( 
    const jace::VmLoader& loader, 
    const jace::OptionList& options, 
    bool ignoreUnrecognized = true); 

Ich habe festgestellt Dokumentation für Marshalling Primitiven von C++ zu C#, aber ich Ich bin mir nicht sicher, wie man Referenztypen oder Nicht-Pritemive-Typen wie VmLoader oder OptionList (beide Klassen) behandelt. Ich versuche, eine C++ API mit einem C# -Schicht zu wickeln, delegieren an den zugrunde liegenden C++ - Code für die tatsächliche Methodenimplementierung.

Irgendwelche Ideen?

Antwort

4

AFAIK, PIn eine Funktion mit C++ - Konstrukten wird nicht unterstützt. Sie könnten es wahrscheinlich zur Arbeit bringen, aber ich denke, dass Sie Probleme finden werden.

Was unterstützt wird, ist das Schreiben einer einfachen C-Wrapper-Funktion, die in Ihre C++ - Funktion aufruft. PStellen Sie stattdessen die Wrapper-Funktion ein, und das wird ausreichen.

0

Angenommen, die C++ - DLL exportiert die Typen, die als Referenz übergeben werden, korrekt. Sie können also einen leicht verwalteten C++ - Wrapper einrichten, der die DLL aufruft. Mit verwaltetem C++ können Sie native C/C++ - Bibliotheken und -Dlls direkt aufrufen, während Sie weiterhin eine verwaltete Schnittstelle von den resultierenden Assemblys exportieren. Andere .Net-Sprachen können die verwaltete Schnittstelle genauso aufrufen wie jede andere Assembly. Es ist ein bisschen extra Aufwand, aber es ist der schnellste Weg, um es zu erledigen.