In einem C# -Projekt muss ich Objektparameter übergeben, indem ich Referenzen in eine Struktur einfüge. das heißt ich eine Struktur haben, an einen Dispatcher übergebenKonvertierung von void * zu Objekt in C#
struct SOMESTRUCT
{
public int lpObject;
}
Wo lpObject wie ein Zeiger auf ein benutzerdefiniertes Objekt hält
class SomeClass
{
private string foo;
}
Und die SomeStruct Struktur wird von Methode zu Methode übergeben, um endlich meinen Code zu erreichen. Ich kann den Ausführungsablauf ändern noch das seltsame SOMSTRUCT System, so vermuten ich die einzige Lösung war mein Objekt auf einen Zeiger so zu werfen:
var myObject = new SomeClass();
GCHandle GC = GCHandle.Alloc(myObject, GCHandleType.Pinned);
int myRef = GC.AddrOfPinnedObject().ToInt32();
GC.Free();
SOMESTRUCT struct;
struct.lpObject = myRef;
someMethod(struct);
aber ich kann nicht herausfinden, wie die myObject Mitglieder abrufen aus den lpObject-Feldern. Etwas wie dieses:
SomeClass myObject = CastPointerToObject(struct.myRef) as SomeClass;
Gibt es eine Möglichkeit, es zu tun, oder ist es unmöglich? Wie kann ich dem Garbage Collector mitteilen, dass er mit dem Objekt umgehen soll? Soll ich ein neues Garbage-Collection-Objekt erstellen und das Datenfeld nach Feld kopieren?
TYIA,
IntPtr anstelle von Int .... verwendenso funktioniert es auch in 64bit –