GetLastError() / ERROR_INSUFFICIENT_BUFFER ? [Résolu]

Signaler
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
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

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
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
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
37
Ouaip, QueryDosDevice prend en charge l'attribut SetLastError, ton prototype de fonction est bon.
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
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...
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
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
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
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.