Rechercher : dans
Par :

[Visual studio c++] initialiser un HANDLE

Dernière réponse le 11 mai 2008 à 17:55:49 daronmaster, le 5 mai 2008 à 20:30:34 
 Signaler ce message aux modérateurs

Bonjour,

voila je suis en train de faire un petit projet sous visual studio 2008, c'est un projet du type "Win32 console application".

dans ce projet, j'utilise une fonction qui doit prendre plusieurs argument dont un HANDLE, or je ne trouve pas comment initialiser ce HANDLE.

à mon avis la difficulté vient du fait que c'est une application console win32 et que d'habitude se sont des projets utilisant des winform qui utilisent des HANDLE.

j'espère m'être bien exprimé, si tel n'est pas le cas faites le moi savoir.

merci pour votre aide

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « [Visual studio c++] initialiser un HANDLE » dans :
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.

1

BoOst, le 5 mai 2008 à 20:34:31

Peut tu donner la fonction que tu utilise et sa liste d'arguments ?
si il s'agit d'un handle de fenetre et que tu n'en utilise pas tu peut passer la valeur NULL a priori, ensuite ca depend de la fonction bien sûr ;)

Répondre à BoOst

2

daronmaster, le 5 mai 2008 à 20:37:32

Voici la fonction utilisée :

DWORD WINAPI WlanGetAvailableNetworkList(
__in HANDLE hClientHandle,
__in const GUID* pInterfaceGuid,
__in DWORD dwFlags,
__reserved PVOID pReserved,
__out PWLAN_AVAILABLE_NETWORK_LIST* ppAvailableNetworkList
);


le probleme c'est que le handle n epeut pas etre null

merci pour ton aide

Répondre à daronmaster

3

daronmaster, le 5 mai 2008 à 20:44:29

Au passage je suis aller voir sur la msdn et je ne voit pas comment faire

Répondre à daronmaster

4

bitrate, le 5 mai 2008 à 21:03:05

Comme indiqué sur MSDN le HANDLE demandé en entrée est retourné par la fonction WlanOpenHandle

faut juste appeler avant

++

Répondre à bitrate

5

BoOst, le 5 mai 2008 à 21:06:38

En fait le handle "WIFI" doit etre obtenu par "wlanOpenHAndle", une fonction que tu doit appeler avant.

http://msdn.microsoft.com/en-us/library/ms706759(VS.85).aspx

tu passe 1 ou 2 dans le parametre "clientversion" suivant la version de ton Windows,
puis en retour tu obtiendra dans "phClientHandle" le handle a utiliser dans la fonction suivante.

(une recherche google sur ces 2 noms de fonctions dervait te retourner quelques exemples, en fonction du language que tu utilise)

bon courage :)

Répondre à BoOst

6

daronmaster, le 6 mai 2008 à 10:26:01

Salut les gens, tout d'abord merci, ensuite encore besoin d'aide

voici la fameuse fonction à utiliser pour choper le handle :

DWORD WINAPI WlanOpenHandle(
__in DWORD dwClientVersion,
__reserved PVOID pReserved,
__out PDWORD pdwNegotiatedVersion,
__out PHANDLE phClientHandle
);

ma 1ère question (certainement bête) : PHANDLE est un pointer sur un HANDLE ?

2nde question : voici le code tel que je l'utilise:

PDWORD out1=NULL;

PHANDLE out2=NULL;

if (WlanOpenHandle(1,NULL,out1,out2) != ERROR_SUCCESS ) cout << "error openHandle" << endl;

PWLAN_AVAILABLE_NETWORK_LIST p;

char c1;

GUID g;

HRESULT res = CoCreateGuid(&g);

if (res != S_OK) cout << "erreur CoCreateGuid" << endl;

DWORD d = WlanGetAvailableNetworkList(*out2,(const GUID *)&g ,0x00000001,NULL,&p);

//la j'ai un switch sur le resultat d pour savoir si j'ai une erreur

lorsque je compile j'ai une erreur :

Unhandled exception at 0x00412128 in Scan.exe: 0xC0000005: Access violation reading location 0x00000000.

Scan étant le nom du projet

bon est-ce que cela viendrait du troisieme parametre de lWlanGetAvailableNetworkList ?



merci encore

Répondre à daronmaster

7

daronmaster, le 6 mai 2008 à 11:24:51

Bon tout compte fait, je viens de voir que le message d'erreur dans la console etait "error openHandle" donc le probleme doit venir des argument passés. il me semble pourtant ne pas m'etre trompé.

je besoin de votre aide

merci

Répondre à daronmaster

8

daronmaster, le 6 mai 2008 à 11:37:43

Bon ce qui est bien sur un forum c'"est que tu peux te repondre à toi meme :

dans WlanopenHandle si les deux dernier parametres sont à null alors la focntion retourne un code d'erreur donc pas d'initialisation à null pour out1 et out2.

bon ok pour mais maintenant j'ai ça comme message d'erreur:

Run-Time Check Failure #3 - The variable 'out2' is being used without being initialized.

et là je crois ne pa pouvoir m'aider alors "please help me"

comment initilaiser un pointeur sans le mettre à null ?

Répondre à daronmaster

9

daronmaster, le 6 mai 2008 à 11:51:29

Voici mon nouveau code:

DWORD out1;

HANDLE out2;

DWORD d1 = WlanOpenHandle(2,null,&out1,&out2);

switch(d1){

case ERROR_INVALID_PARAMETER :cout <<" error: parameter" << endl;break;

case ERROR_NOT_ENOUGH_MEMORY :cout <<" error: memory allocation" << endl;break;

case ERROR_REMOTE_SESSION_LIMIT_EXCEEDED:cout <<" error: too much handle" << endl;break;

case ERROR_SUCCESS:cout << "no problem" << endl;break;

default: cout << "default" << endl;break;
}

PWLAN_AVAILABLE_NETWORK_LIST p;

char c1;

GUID g;

HRESULT res = CoCreateGuid(&g);

if (res != S_OK) cout << "error :CoCreateGuid" << endl;

DWORD d = WlanGetAvailableNetworkList(out2,(const GUID *)&g ,WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES,NULL,&p);

switch(d){

case ERROR_SUCCESS : cout << " no problem " << endl;break;

case ERROR_INVALID_PARAMETER : cout << " error: parameter " << endl;break;

case ERROR_INVALID_HANDLE : cout << " error :handle " << endl;break;

case ERROR_NDIS_DOT11_POWER_STATE_INVALID : cout << " error :wifi turned off() " << endl;break;

//case RPC_STATUS : cout << " probleme ??? " << endl; exit(-1);break;

case ERROR_NOT_ENOUGH_MEMORY : cout << " error :memory allocation" << endl;break;

default:break;
}



/*

resultat dans la console (grace aux cout):

default
error :handle

ensuite une fenetre s'ouvre avec comme message d'erreur :

Windows has triggered a breakpoint in Scan.exe.

This may be due to a corruption of the heap, which indicates a bug in Scan.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while Scan.exe has focus.

The output window may have more diagnostic information.

on peut cliquer sur break ou continue

je fais continue et le programme termine


cela ne me satisfait pas car ça signifie qu'il y a toujours un pb avec le HANDLE



merci pour votre aide, je revient sur le forum ce soir, la je dois y aller

*/

Répondre à daronmaster

10

daronmaster, le 6 mai 2008 à 19:32:18

Besoin d'aide please

Répondre à daronmaster

11

daronmaster, le 6 mai 2008 à 21:02:34

Please

Répondre à daronmaster

12

 daronmaster, le 11 mai 2008 à 17:55:49

Je passe en résolu

Répondre à daronmaster