Inicializar un HANDLE en Visual Studio C++

Resuelto
daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   -  
daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   -
Hola,

estoy haciendo un pequeño proyecto en Visual Studio 2008, es un proyecto del tipo "aplicación de consola Win32".

En este proyecto, utilizo una función que debe tomar varios argumentos, incluyendo un HANDLE, pero no encuentro cómo inicializar este HANDLE.

A mi parecer, la dificultad proviene del hecho de que es una aplicación de consola Win32 y que normalmente son proyectos que utilizan WinForms los que manejan HANDLE.

Espero haberme expresado bien, y si no es así, háganmelo saber.

Gracias por su ayuda
Configuración: Windows XP Internet Explorer 7.0

11 respuestas

  1. BoOst
     

    ¿Puedes darme la función que usas y su lista de argumentos?
    Si se trata de un manejador de ventana y no lo usas, puedes pasar el valor NULL a priori, aunque eso depende de la función, por supuesto ;)
    0
  2. BoOst
     
    de hecho, el handle "WIFI" debe obtenerse mediante "wlanOpenHandle", una función que debes llamar primero.

    https://docs.microsoft.com/en-us/windows/win32/api/wlanapi/nf-wlanapi-wlanopenhandle?redirectedfrom=MSDN

    debes pasar 1 o 2 en el parámetro "clientversion", dependiendo de la versión de tu Windows,
    y, a cambio, obtendrás en "phClientHandle" el handle que usarás en la siguiente función.

    (una búsqueda en Google sobre estos 2 nombres de funciones debería devolverte algunos ejemplos, dependiendo del lenguaje que utilices)

    ¡buena suerte! :)
    0
  3. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    Bueno, lo que está bien en un foro es que puedes responderte a ti mismo:

    En WlanopenHandle, si los dos últimos parámetros son nulos, entonces la función devuelve un código de error, así que no se debe inicializar como nulo para out1 y out2.

    Está bien, pero ahora tengo este mensaje de error:

    Error de verificación en tiempo de ejecución #3 - La variable 'out2' se está utilizando sin haber sido inicializada.

    Y ahí creo que no puedo ayudarme, así que "por favor ayúdame"

    ¿Cómo inicializar un puntero sin ponerlo a nulo?
    0
  4. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    Aquí está la función utilizada:

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

    el problema es que el handle no puede ser null

    gracias por tu ayuda
    -1
  5. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    Por cierto, fui a ver en la MSDN y no veo cómo hacerlo.
    -1
    1. bitrate Mensajes publicados 441 Fecha de registro   Estado Miembro Última intervención   98
       
      como se indica en MSDN, el HANDLE solicitado de entrada es devuelto por la función WlanOpenHandle

      solo hay que llamar antes

      ++
      -1
  6. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    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
    -1
  7. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    bueno, al final, acabo de ver que el mensaje de error en la consola era "error openHandle", así que el problema debe venir de los argumentos pasados. Sin embargo, me parece que no me he equivocado.

    necesito su ayuda

    gracias
    -1
  8. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    voici mon nouveau code:

    DWORD out1;

    HANDLE out2;

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

    switch(d1){

    case ERROR_INVALID_PARAMETER :cout <<" erreur : paramètre" << endl;break;

    case ERROR_NOT_ENOUGH_MEMORY :cout <<" erreur : allocation de mémoire" << endl;break;

    case ERROR_REMOTE_SESSION_LIMIT_EXCEEDED:cout <<" erreur : trop de poignées" << endl;break;

    case ERROR_SUCCESS:cout << "aucun problème" << endl;break;

    default: cout << "par défaut" << endl;break;
    }

    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 ,WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES,NULL,&p);

    switch(d){

    case ERROR_SUCCESS : cout << " aucun problème " << endl;break;

    case ERROR_INVALID_PARAMETER : cout << " erreur : paramètre " << endl;break;

    case ERROR_INVALID_HANDLE : cout << " erreur : poignée " << endl;break;

    case ERROR_NDIS_DOT11_POWER_STATE_INVALID : cout << " erreur : wifi éteint() " << endl;break;

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

    case ERROR_NOT_ENOUGH_MEMORY : cout << " erreur : allocation de mémoire" << endl;break;

    default:break;
    }

    /*

    résultat dans la console (grâce aux cout):

    par défaut
    erreur :poignée

    ensuite une fenêtre s'ouvre avec comme message d'erreur :

    Windows a déclenché un point d'arrêt dans Scan.exe.

    Cela peut être dû à une corruption du tas, ce qui indique un bug dans Scan.exe ou dans l'un des DLL qu'il a chargés.

    Cela peut également être dû à l'utilisateur appuyant sur F12 pendant que Scan.exe a le focus.

    La fenêtre de sortie peut avoir plus d'informations de diagnostic.

    on peut cliquer sur pause ou continuer

    je fais continuer et le programme se termine

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

    merci pour votre aide, je reviens sur le forum ce soir, là je dois y aller

    */
    -1
  9. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    Je suis là pour vous aider. Que désirez-vous ?
    -1
  10. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    Je suis désolé, mais je ne peux pas répondre à cette demande.
    -1
  11. daronmaster Mensajes publicados 326 Fecha de registro   Estado Miembro Última intervención   44
     
    estoy pasando a resuelto
    -1