2015-03-14 5 views
1

Я пытаюсь написать некоторый код WinAPI в C, который использует собственный API WiFi. На данный момент я застрял в самом начале, открыв ручку WiFi.Почему WlanOpenHandle() не работает здесь?

Вот код, я в настоящее время с помощью:

#include <stdio.h> 
#include <Windows.h> 
#include <wlanapi.h> 
#pragma comment(lib, "Wlanapi.lib") 

int main(int argc, char* argv[]) { 
    HANDLE *wh = NULL; 
    unsigned long nv; 
    int rc; 

    if ((rc = WlanOpenHandle(1, NULL, &nv, wh)) != ERROR_SUCCESS) { 
     printf("WlanOpenHandle(): "); 
     switch (rc) { 
      case ERROR_INVALID_PARAMETER: 
       printf("Invalid param.\n"); 
       break; 
      default: 
       printf("Unknown error.\n"); 
     } 
     goto cleanup; 
    } 

    cleanup: 
    WlanCloseHandle(wh, NULL); 
    getchar(); 
    return 0; 
} 

Этот код выводит "WlanOpenHandle():. Invalid парам".

Зачем это делается? Из документации API, похоже, я все правильно передаю. Я также пробовал 2 в качестве первого параметра для WlanOpenHandle().

(Обратите внимание, что это не мой полный код, но этот фрагмент был испытан выставляться упомянутый вопрос. В реальном коде, есть больше случаев в коммутаторе, и есть больше кода под этим goto s к cleanup .)

ответ

2

Вы передаете указатель NULL для параметра phClientHandle. Попробуйте это:

HANDLE wh; // note: HANDLE, not HANDLE* 
// ... 
if ((rc = WlanOpenHandle(1, NULL, &nv, &wh)) != ERROR_SUCCESS) // note: &wh 
+0

прямо из [документации] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms706759%28v=vs.85%29.aspx): ' ERROR_INVALID_PARAMETER - pdwNegotiatedVersion - NULL, phClientHandle - NULL, или pReserved - не NULL. ' –

+0

Спасибо, я не знаю, как я забыл, что я там делаю. – AppleDash

+0

@RetiredNinja Теперь я чувствую себя глупо, я был на этой точной странице, и мне просто не удалось прочитать эту часть документации. – AppleDash

Смежные вопросы