GetLastError() / ERROR_INSUFFICIENT_BUFFER ? [Résolu]

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

Votre réponse

5 réponses

Meilleure réponse
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
2 août 2005 à 14:37
3
Merci
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

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de sebmafate
Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
2 août 2005 à 15:23
3
Merci
Ouaip, QueryDosDevice prend en charge l'attribut SetLastError, ton prototype de fonction est bon.

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
13 juillet 2015
2 août 2005 à 14:46
0
Merci
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
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
2 août 2005 à 14:51
0
Merci
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
Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Dernière intervention
13 juillet 2015
2 août 2005 à 14:57
0
Merci
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.