Ich möchte 100 - 10.000 Punkte von einem nicht verwalteten C ++ nach C # weitergeben.
Die C ++ Seite sieht so aus:
%Vor%Jetzt sieht meine C # -Seite so aus:
%Vor%Wie muss ich meinen Code ändern, um den std :: vector aus nicht verwaltetem C ++ mit seinem gesamten Inhalt an C # zu übergeben?
Ich habe dies mit C ++ - CLI-Wrapper implementiert. C ++ CLI ist einer der drei möglichen Ansätze für C ++ C # Interop. Die anderen zwei Ansätze sind P / Invoke und COM. (Ich habe ein paar gute Leute gesehen, die C ++ CLI gegenüber den anderen Ansätzen empfehlen)
Um Informationen aus nativem Code in verwalteten Code zu mappen, müssen Sie den nativen Code zunächst in eine von C ++ CLI verwaltete Klasse umbrechen. Erstellen Sie ein neues Projekt, das systemeigenen Code und seinen C ++ - CLI-Wrapper enthält. Stellen Sie sicher, dass Sie den /clr
-Compilerschalter für dieses Projekt aktivieren. Erstellen Sie dieses Projekt in einer DLL. Um diese Bibliothek zu verwenden, fügen Sie einfach ihre Referenz in C # hinzu und tätigen Sie Aufrufe dagegen. Sie können das tun, wenn beide Projekte in der gleichen Lösung sind.
Hier sind meine Quelldateien für ein einfaches Programm, um eine std::vector<double>
von nativem Code in C # verwalteten Code zu marshallen.
1) Projekt-EntityLib (C ++ CLI dll) (systemeigener Code mit Wrapper)
Datei NativeEntity.h
%Vor%Datei NativeEntity.cpp
%Vor%Datei ManagedEntity.h (Wrapper-Klasse)
%Vor%Datei ManagedEntity.cpp
%Vor%2) Projekt SimpleClient (C # exe)
%Vor%Tags und Links c# c++ interop vector marshalling