Comment marshaler une structure comme un pointeur vers une structure?
Je suis en train de passer d'une structure à partir de C# en C++ de la bibliothèque. Je passe de la structure en tant qu'objet et C++ la fonction attend un pointeur (void *).
Je vais avoir des problème de passage de la structure.
[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
Voici le texte de l'exception-je obtenir:
"Ne peut maréchal paramètre #1': Invalid réussi/non géré type de combinaison (ce type de valeur doit être couplé avec Struct)."
Si je l'ai trouvé un article MSDN qui utilise LPStruct exactement dans ce contexte.
C'est ma structure, je suis en train de maréchal:
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
C'est le C++ la fonction:
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
source d'informationauteur THX-1138
Vous devez vous connecter pour publier un commentaire.
Essayer de passer de la structure en tant que paramètre de référence.
Lorsque vous utilisez un ref combiné avec une structure, conceptuellement, passe l'adresse.
D'ailleurs,
UnmanagedType.LPStruct
est rarement, si jamais, le bonMarshalAs
argument. Une citation d'Adam Nathan qui est un employé de Microsoft: