繁体   English   中英

WSALookupServiceBegin() 上的错误代码 10022(无效参数)

[英]Error code 10022 (Invalid arugment) on WSALookupServiceBegin()

我目前正在尝试使用 Window Winsock API 进行蓝牙设备发现。 我对 C 和 C++ 编码相当陌生,所以如果我在这里有任何愚蠢的错误,我深表歉意。

#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2bth.h>
#include <stdio.h>

#pragma comment(lib, "ws2_32.lib")

int main() {
    int iResult;

    // Initialize winsock
    WSADATA wsaData;
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }

    // Create query parameters
    WSAQUERYSETW querySet;
    memset(&querySet, 0, sizeof(querySet));
    querySet.dwSize = sizeof(querySet);
    querySet.dwNameSpace = NS_BTH;

    // Create flags and handle
    DWORD flags = LUP_DEEP | LUP_RETURN_ALL;
    HANDLE handle;

    // Begin service lookup
    iResult = WSALookupServiceBeginW(&querySet, flags, &handle);
    if(iResult != 0) {
        printf("Failed to begin service lookup: %d\n", WSAGetLastError());
        return 1;
    }
}

我一直在寻找使用 WinSock 进行蓝牙设备发现的示例,但是我完全找不到任何示例。 我确信我只是在搜索中使用了错误的关键字。 但是,当运行此代码时,它会一直正常运行,直到实际调用WSALookupServiceBeginW() 调用此方法时,我收到错误代码 10022,根据 Microsoft 文档,这意味着我传递了无效参数。 但是,我不确定哪个论点是无效的。 是我的查询参数吗? 我的旗帜? 我的查询集?

如果有人知道我在此特定代码块中做错了什么,或者知道我可以找到有关如何使用 WinSock API 的信息的好地方,我也将不胜感激。

编辑 1:我对编码并不陌生,只是对 C 和 C++ 编码(以及一般的 Windows API)。 我不会说我是专家,但我会说我相当精通 Java 编程语言。

我遇到的问题是我在WSALookupServiceBegin()函数中使用了错误的标志。 这些标志应该包含LUP_CONTAINERSLUP_FLUSH_CACHE的值,但它们没有。 感谢评论中的人提供解决方案以及有关如何更好地使用 Winsock 的更多信息! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM