GetLastError() / ERROR_INSUFFICIENT_BUFFER ? [Résolu]

el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 2 août 2005 à 14:34 - Dernière réponse : Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention
- 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 ?
Afficher la suite 

5 réponses

Répondre au sujet
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 2 août 2005 à 14:37
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebmafate
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 2 août 2005 à 15:23
+3
Utile
Ouaip, QueryDosDevice prend en charge l'attribut SetLastError, ton prototype de fonction est bon.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Lutinore
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 2 août 2005 à 14:46
0
Utile
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...
Commenter la réponse de el_teedee
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 2 août 2005 à 14:51
0
Utile
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
Commenter la réponse de sebmafate
el_teedee 498 Messages postés mercredi 7 juillet 2004Date d'inscription 13 juillet 2015 Dernière intervention - 2 août 2005 à 14:57
0
Utile
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.
Commenter la réponse de el_teedee

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.