Ich arbeite an einem Projekt, das in C++ geschriebene DLL und einen C# -Code enthält. Lassen Sie uns sagen, dass diese DLL eine Funktion hat:Umgang mit Zeigern zu Struktur in C#
MyStruct* GetPointer(); // returns pointer to MyStruct structure
MyStruct Struktur sieht wie folgt aus:
struct MyStruct
{
OtherStruct1 *data1;
OtherStruct2 *data2;
};
Und OtherStruct1 und OtherStruct2 Strukturen wie folgt aussehen:
struct OtherStruct1
{
public:
double x;
char y;
};
struct OtherStruct2
{
public:
float a;
float b;
float c;
float d;
};
Meine Frage ist - was ist Der beste Weg, um alle diese Zeiger in einem C# -Code zu behandeln? Mit "Handhabung" meine ich Lese- und Speichervorgänge. Strukturen in C# können nicht einfach Zeigervariablen enthalten. Was soll ich machen? Was ist der eleganteste Weg?
Sind Sie erwarten, dass die Objekte, die im C# -Code geändert werden, auch den C++ - Code aktualisieren, der auf dieselben Zeiger schaut? Ist es in Ordnung, wenn Sie vor dem Zeigerobjekt einen Aufruf wie [Marshal.StructureToPtr'] (https://msdn.microsoft.com/en-us/library/dn261468 (v = vs.110) .aspx) tätigen müssen wird aktualisiert? –
Ich erwarte eine Möglichkeit, Werte von Objekten, die von DLL angegeben werden, direkt im Speicher zu ändern, damit der C++ - Code an diesen Objekten weiterarbeiten kann, die durch C# -Code geändert wurden. Es ist so, als ob DLL Zeiger gibt, C# füllt sie mit Anfangsdaten und DLL arbeitet daran. Dann liest der C# -Code die von der DLL modifizierten Daten und die Ergebnisse auf der Leinwand. –
Ist es möglich, 'GetPointer' zu einer C# -Methode zu machen, so dass der verwaltete Code derjenige ist, der den gemeinsamen Speicherbereich erzeugt? Und/Oder können Sie ein [C++/Cli] (https://msdn.microsoft.com/en-us/library/68td296t.aspx) Shim verwenden, um die Lücke zu überbrücken? –