Comment faire pour importer const char* API en C#?
Compte tenu de cette API C de la déclaration de comment serait-il importé de C#?
const char* _stdcall z4LLkGetKeySTD(void);
J'ai pu en arriver là:
[DllImport("zip4_w32.dll",
CallingConvention = CallingConvention.StdCall,
EntryPoint = "z4LLkGetKeySTD",
ExactSpelling = false)]
private extern static const char* z4LLkGetKeySTD();
OriginalL'auteur Mike Chess | 2009-02-03
Vous devez vous connecter pour publier un commentaire.
Essayer cette
Vous pouvez ensuite convertir le résultat d'une Chaîne à l'aide de Maréchal.PtrToStringAnsi(). Vous aurez toujours besoin de libérer de la mémoire pour la IntPtr à l'aide de la Maréchal.Gratuit* méthode.
il dépend de la façon dont la mémoire a été allouée. Le Maréchal.FreeCoTaskMemAlloc libère un natif CoTaskMemAlloc. Chacun travaille avec une méthode native
OriginalL'auteur JaredPar
Toujours utiliser C++ const char* ou char* et non pas std::string.
Aussi garder à l'esprit que le char en C++ est un sbyte en C#
et unsigned char est un octet en C#.
Il est conseillé d'utiliser le code unsafe lorsque vous traitez avec DllImport.
OriginalL'auteur Robert
Suffit d'utiliser 'string' au lieu de 'const char *'.
Edit: C'est dangereux pour la raison JaredPar expliqué. Si vous ne voulez pas un libre, n'utilisez pas cette méthode.
Certainement ne pas utiliser des chaînes de caractères. Si le retour d'une fonction est une Chaîne de la CLR tente de CoTaskMemFree le natif de pointeur qui n'est probablement pas ce que l'utilisateur veut ici
msdn.microsoft.com/en-us/magazine/cc164193.aspx en bas de paragraphe sous la figure 8
Wow, je n'avais aucune idée à ce sujet. Répondre et je vais être sûr de voter pour toi!
OriginalL'auteur Cody Brocious