Wrapping Visual C ++ in C #
-
08-07-2019 - |
Frage
Ich brauche Prozess Injektion unter Verwendung von C ++ zu tun, aber ich würde es vorziehen, C # für alles anderes als die niedrige Niveau Sachen zu verwenden. Ich habe über „Funktion wrapping“ gehört und „Marshalling“ und haben einiges an Google-Suche durchgeführt und haben Bits an Informationen hier und da gefunden, aber ich bin immer noch wirklich fehlt.
Dinge, die ich habe, um von Nutzen zu lesen;
http://msdn.microsoft.com/en-us /library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/ 08 / Aufruf-c-lib-from-c.html
Wie kann ich die ganze untere Ebene stuff (native C ++) in C # wickeln, so kann ich leicht, diese Funktionen in einer Sprache, befehle ich bin wohler mit, C #?
Alle Informationen zum Thema wird sehr geschätzt.
Lösung
ich denke, P / Invoke ist wirklich der einfachste Ansatz:
- Erstellen Sie eine DLL in nicht verwaltete C ++, enthält alle Funktionen, die Sie benötigen die Injektion zu tun.
- Sie in Ihrem C # -Code, erklären einige
static extern
Methoden und verwenden Sie dieDllImport
Attribut in Ihre C ++ dll zu zeigen. Weitere Einzelheiten finden Sie den Link zur Verfügung gestellt von arul in seine Antwort .
Beachten Sie, dass P / Invoke nicht auf „Windows-API-Funktionen“ beschränkt ist -. Sie beliebigen nativen DLL ausgesetzt Funktionen aufrufen
Ein möglicher Nachteil von P / Invoke ist, dass Sie die Unterschriften für Ihre C ++ Funktionen zur Verfügung zu stellen haben, möglicherweise etwas weniger als offensichtlich Rangier angeben. In diesem Fall könnte erwägen Sie einen COM-Server anstelle eines „plain“ DLL Konstruktion und mit COM-Interop Code von C # nennen.
Andere Tipps
Sie möchten P / Invoke verwenden, finden Sie unter MSDN Magazine .
Wenn Pinvoking ist nicht das, was Sie tun wollen, dann erstellen Sie eine verwaltete C ++ Anwendung. Verwenden Sie native C ++, den Prozess Injektion Sachen zu tun. Verwenden Sie verwaltete c ++ eine .NET-freundliche Schnittstelle zu diesem nativen Verhalten zu schaffen. Dies kann dann von C # aufgerufen werden.