Comment déclarer en C# une fonction C qui renvoie un pointeur vers une structure?p/invoque une fonction C qui renvoie un pointeur vers une structure
Je crois que suivre est une façon de le faire, suivie par Marshal.PtrToStructure pour obtenir la valeur de structure réelle.
// C-function
SimpleStruct * Function(void);
// C# import
[DllImport("MyDll.dll")]
public static extern IntPtr Function();
- Ai-je raison à ce sujet?
- Existe-t-il d'autres façons d'accomplir la même chose? (Il serait bon de récupérer struct par valeur)
Les pointeurs de marshalling manuelles ne sont presque jamais nécessaires. Habituellement, vous pouvez travailler directement avec les structures. –
Je crois que vous vous trompez. Il existe un certain nombre de grandes classes de problèmes d'interopérabilité qui nécessitent un marshaling manuel des pointeurs. Les structures et structures de tailles variables contenant des réseaux de structures ne sont que deux des plus communes. –
J'ai mis en place un exemple de marshaling une structure contenant un tableau de structures à http://arnshea.blogspot.com/2009/04/interop-with-struct-that-contains-array.html. Il est assez rare que vous deviez manuellement marshaler des données pour interop ... –