How to Marshall Void * mit Plattform aufrufen

Ich muss eine Funktion von einem C-API aufrufen, das in einer DLL enthalten ist. Funktionsprototyp sieht wie folgt aus ....

int func( char* name, void* value );

wobei der Inhalt des Zeigerwerts auf einen beliebigen Typ verweisen kann, der vom übergebenen Namen abhängt. Ich bin mir nicht sicher, wie ich den Dll-Inport einrichten soll, um diese Lücke korrekt zu marshallen *. Ich habe mit IntPtr experimentiert, was zu funktionieren scheint, wenn der Wert ein int ist, aber ich kann die Werte für Floats usw. nicht korrekt abrufen.

Ich versuche die Funktion so zu importieren ...

[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func( string name, ref IntPtr value );

pls beachte, dass der Wert eine Ausgabe ist. Ein Zeiger auf einen Wert eines beliebigen Typs, d. H. Die Adresse in einem globalen Speicherbereich eines Werts eines bekannten Typs (dem Anrufer bekannt). In einem Programm müsste der Anrufer dann diese Leerstelle * auf den gewünschten Typ und die gewünschte Dereferenzierung setzen, um den tatsächlichen Wert dort zu speichern. Die bisher gegebenen Antworten scheinen auf der Annahme zu beruhen, dass die Funktion das Ergebnis an die übergebene Zeigerposition schreibt. Mein Fehler, da ich nicht zu genau war. Es tut uns leid. C # ist nicht meine Tasche, und ich weiß nicht einmal, ob IntPtr der richtige Weg ist, um hierher zu kommen ...

Antworten auf die Frage(8)

Ihre Antwort auf die Frage