Wie Marschall C++/CLI array in struct zu nicht verwalteten C++
Ich bin auf der Suche nach der richtigen syntax, um pass ein struct-array, um eine unmanaged C++ dll.
meine dll-Importe so aufgerufen werden
#define _DllImport [DllImport("Controller.dll", CallingConvention = CallingConvention::Cdecl)] static
_DllImport bool _Validation(/* array of struct somehow */);
In meinem client code ich habe
List<MyStruct^> list;
MyObject::_Validation(/* list*/);
Weiß ich, System::Runtime::InteropServices::Marshal hat eine Menge nützlicher Methoden für die tun Sachen wie diese, aber ich bin nicht sicher, über die zu verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine verwaltete version die nicht verwaltete Struktur mit StructLayout.Sequenzielle (stellen Sie sicher, um die Dinge in der gleichen Reihenfolge). Sie sollten dann in der Lage sein, um es zu übergeben wie Sie würde übergeben Sie es an jeden verwalteten Funktion (z.B. Validierung(MyStruct[] pStructs).
Zum Beispiel, sagen wir, unsere native Funktion hat dieser Prototyp:
und die native MYSTRUCT ist wie folgt definiert:
Dann in C# definieren Sie eine verwaltete version der Struktur ist wie folgt:
Die managed-Prototyp wie folgt:
Können Sie rufen dann die Funktion übergeben werden, ein array von struct MYSTRUCT wie folgt:
Können Sie Marshall.StructureToPtr um einen IntPtr, die weitergegeben werden konnten in eine native MyStruct* array.
Allerdings bin ich mir nicht sicher, wie Sie diese aus einer Liste direkt. Ich glaube, Sie brauchen, um zu konvertieren diese in ein array und verwenden Sie eine pin_ptr (um zu verhindern, dass die GC aus bewegen Sie Ihre Speicher) vor der übergabe an den nativen code.