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_CONTAINERS
和 LUP_FLUSH_CACHE
的值,但它们没有。感谢解决方案评论中的人们以及有关如何更好地使用 Winsock 的更多信息! :)
我目前正在尝试使用 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_CONTAINERS
和 LUP_FLUSH_CACHE
的值,但它们没有。感谢解决方案评论中的人们以及有关如何更好地使用 Winsock 的更多信息! :)