Ich habe ein ziemlich großes System in C++ implementiert, mit dem ich interagieren muss. Das System hat eine ziemlich große API, eine Anzahl von C++ DLLs. Diese DLLs exportieren C++ - Klassen im Gegensatz zu einer netten C-Stil-API. und ich muss sie aus einem neuen C# -Projekt verwenden.So rufen Sie eine C++ API aus C#
Von dem, was ich .NET wissen hat drei Möglichkeiten, mit nativer Software interagieren:
- P/Invoke - die nur auf C-APIs
- COM arbeitet Objekte
- C++/CLI
So wie ich es verstehe, habe ich drei Ansätze entsprechend:
- Einen Wrapper in C schreiben und mit P/Invoke aufrufen. Das scheint viel zu viel Arbeit.
- Einen Wrapper mit COM schreiben. was ich nicht kann, und wenn es nicht wahnsinnig leicht ist, möchte ich nicht lernen, was mir scheint - eine sterbende Technologie.
- Einen Wrapper in C++/CLI schreiben. das scheint die geringste Arbeit, wenn auch immer noch viel.
Meine Frage:
Zunächst einmal möchte ich wissen, warum nicht wie .NET erlauben Sie mir einfach die C++ Klassen "as is" zu benutzen? Ich nehme an, es ist eine Frage des Gedächtnisses Management. und wenn es so ist, bin ich mehr als bereit Finalizer zu schreiben, und IDisposable zu implementieren. Von dem, was ich weiß, C++ Klassen sind nur wirklich ausgefallene Strukturen, und da P/Invoke unterstützt Strukturen und Funktionen , die Strukturen als der erste Parameter nehmen, warum nicht unterstützt Klassen?
Zweitens angenommen, ich bin wirklich faul, und es ist eine Menge langweilig, langweilig, Arbeit, Was wäre der beste Weg, um diese DLLs zu verwenden? eine Möglichkeit sie direkt von C# anzurufen wäre das Beste. Wenn nicht, würde ich lieben ein automatisches Werkzeug, um die Wrapper zu produzieren. Auch könnten die DLLs ändern, wahrscheinlich, nur leicht, aber immer noch, ID nicht gezwungen manuell Wrapper umschreiben.
Für eine wirklich gute Antwort, vor allem auf dem ersten Teil oder ein gutes automatisches Werkzeug, ich werde eine Prämie belohnen ...
Danke
1. Da die verschiedenen DLL unterschiedliche Aufrufkonventionen haben. –
http://stackoverflow.com/questions/2120690/tool-for-creating-net-wrappers-for-a-com-dll –
Ich denke, C++/CLI wäre gut. Ich habe jedoch nicht gerade Erfahrung mit C++ - Exporten. – chris