J'essaye d'employer pinvoke pour marshal une structure de C à C#. Alors que je suis capable de rassembler un intptr je ne peux pas trouver la syntaxe pour marshaler un double pointeur. Le pointeur int et le double pointeur sont tous deux utilisés du côté C pour allouer un tableau d'ints ou de doubles.Comment marshaler un double pointeur?
Voici le struct C:
struct xyz
{
int *np; // an int pointer works fine
double *foo;
};
Et voici la classe C#:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class xyz
{
Intptr np; // works fine
// double *foo ??
}
Je suis incapable de trouver des instructions sur la façon de marc
IntPtr est juste un pointeur: jusqu'à void *; ainsi vous pouvez essayer de marshaling "double * foo" comme "IntPtr foo"; –
IntPtr ne signifie pas "pointeur sur nombre entier". MSDN: le type IntPtr est conçu pour être un entier dont la taille est spécifique à la plate-forme. Il peut pointer vers n'importe quelles données. –
Clarification: le code C fait tout le alloc/libre de la mémoire, donc le côté C# est béatement inconscient de tout cela. – PaeneInsula