GetLastError() / ERROR_INSUFFICIENT_BUFFER ?

Résolu
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 - 2 août 2005 à 14:34
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 2 août 2005 à 15:23
Salut,



j'ai copié un bout de code de PInvoke.net, et dedans, il y a la fonction GetLastError, mais j'ai une erreur sur cette ligne :



Le nom 'GetLastError' n'existe pas dans la classe ni dans l'espace de noms 'nom_projet.ma_classe'



que faut-il pour pouvoir utiliser GetLastError ?

------------------------------------------------------------------------------------------

Alors en fait, je viens de trouver l'erreur, ou plutôt j'ai contourné l'erreur, je viens de voir que la fonction AllocHGlobal est un membre de Marshall, qui contient, ô miracle la fonction GetLastWin32Error().

J'ai donc remplacé comme ceci :

else if(GetLastError() == ERROR_INSUFFICIENT_BUFFER) par

else if(Marshal.GetLastWin32Error() == ERROR_INSUFFICIENT_BUFFER)

mais il ne connaît pas la constante ERROR_INSUFFICIENT_BUFFER, qqln conaît cette valeur ?

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
2 août 2005 à 14:37
google est ton ami :
http://www.google.fr/search?hl=fr&q=ERROR_INSUFFICIENT_BUFFER+value&meta=

sinon : ERROR_INSUFFICIENT_BUFFER = 122


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 août 2005 à 15:23
Ouaip, QueryDosDevice prend en charge l'attribut SetLastError, ton prototype de fonction est bon.
3
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
2 août 2005 à 14:46
Lol, avec un point d'arrêt, je viens de voir que ca me mettait 122,
mais je savais pas que c'était justement le bon code d'erreur.



dis moi, sur msdn, la page de /library/en-us/cpref/html/frlrfsystemruntimeinteropservicesmarshalclassgetlastwin32errortopic.asp GetLastWin32Error() nous dit que l'on peut pas utiliser directement un Pinvoke sur GetLastError de Kernel32. Il faut "set the SetLastError field to true" pour pouvoir utiliser cette fonction. Je ne sais pas comment faire, j'ai juste trouvé dans la page de=/library/en-us/cpref/html/frlrfsystemruntimeinteropservicesdllimportattributeclasssetlasterrortopic.asp SetLastError :

[C#]
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll", SetLastError=true)]
public static extern int MessageBoxA(int hWnd, String text,
String caption, uint type);
}


Alors je veux bien, mais je fais comment pour ma fonction QueryDosDevice ? Je peux faire ça ?

[DllImport("kernel32.dll", SetLastError=true)]

static extern uint
QueryDosDevice(string lpDeviceName, IntPtr
lpTargetPath, uint ucchMax);



Sinon, merci pour le lien google j'y ai pensé qu'après...
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
2 août 2005 à 14:51
ca sert à rien d'utiliser le GetLastError de l'api... puisqu'il est déjà dans le framework


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
2 août 2005 à 14:57
Oui, ca j'ai bien compris, j'utilise maintenant GetLastWin32Error(), jusque là on est d'accord ?



Maintenant, je voulais juste savoir si pour activer le SetLastError, je
pouvais le mettre tel que je l'ai marqué ci dessus. Mais apparemment ca
marche.

PS : le but de tout ça est de me retourner tous les ports COM disponibles sur ma machine.



Merci.
0
Rejoignez-nous