Wie übergebe ich C # -Array an C ++ und gebe es mit zusätzlichen Elementen zurück an C #?

9

Ich habe ein C # -Projekt, das eine C ++ - DLL verwendet. (im visuellen Studio 2010)

Ich muss ein Array von int übergeben von C # -Code zu C ++ - Funktion und C ++ - Funktion wird einige Elemente im Array hinzufügen, wenn die Kontrolle wieder auf C # -Code kommt, wird C # -Code auch Elemente in der gleichen Array hinzufügen.

 Anfangs habe ich ein Array (der Größe 10000) in C # -Code deklariert und C ++ - Code ist in der Lage, Elemente hinzuzufügen (weil es nur ein Array von int war, Speicherzuweisung ist gleich), aber die Probleme sind Laufzeitfehler aufgrund des Zugriffs außerhalb des Arrays.

Ich kann die Größe auf 100000 erhöhen, aber ich weiß auch nicht, wieviele Elemente C ++ Code hinzufügen wird (auch wenn es nur ein Element sein kann).

Gibt es also eine gemeinsame Datenstruktur (dynamisches Array) für beide oder andere Möglichkeiten? Ich benutze Visual Studio 2010.

So etwas möchte ich tun.
PS: nicht kompilierter Code, und hier habe ich Char-Array anstelle von Int-Array verwendet.

C # -Code

%Vor%

C ++ - Code

%Vor%     
Vikas Kumar 02.10.2011, 04:11
quelle

1 Antwort

4

Es gibt einen guten MSDN-Artikel zum Übergeben von Arrays zwischen verwaltetem und nicht verwaltetem Code Hier . Die Frage ist, warum müssen Sie das Array von C # zu C ++ überhaupt erst übergeben? Warum können Sie die Zuordnung nicht auf der C ++ - Seite (in Ihrer fnCPP-Methode) vornehmen und einen Zeiger auf den C # -Code zurückgeben, und dann einfach Marshal.Copy( source, destination, 0, size ) verwenden, wie in noch eine weitere Stackoverflow Frage ? Dann könnten Sie in Ihrer fnCSHARP-Methode den Inhalt des Arrays in eine Datenstruktur mit variabler Länge (z. B. Liste) kopieren.

    
Amittai Shapira 02.10.2011 08:13
quelle

Tags und Links