0

我有一个 C++/CLI dll 实现了一些由 .NET 应用程序加载的蓝牙功能。如果 dll 是用 .NET 3.5 编译的(应用程序也是如此),一切正常。

我已将 dll 更新为 .NET 4.0(在 VS 2010 中)和平台工具集 v100(VS2010);当然,该应用程序已更新到相同版本的 .NET 框架。从那时起,如果我指定 LUP_FLUSHCACHE 标志,WSALookupServiceBegin 就会崩溃。

这是代码:

HANDLE hLookup = 0;
WSAQUERYSET qs;
::memset(&qs, 0, sizeof(WSAQUERYSET));

// Start the lookup service
qs.dwSize = sizeof(WSAQUERYSET);
qs.dwNameSpace = NS_BTH;

iResult = ::WSALookupServiceBegin(&qs, LUP_CONTAINERS | LUP_RETURN_TYPE | LUP_RETURN_NAME | LUP_RETURN_ADDR | LUP_FLUSHCACHE, &hLookup); **<= Crash here**

指示的错误是 -1073740791 (0xc0000409)(如果检查 ntstatus.h,则缓冲区溢出)。

我已经尝试了一切,添加了一个blob(以指定查询期)等。问题仍然存在。

Winsock 已正确初始化,连接(到 BT SPP 设备)工作正常。只有设备查询崩溃。

有人知道我为什么会遇到这次崩溃吗?

谢谢, 阿莱克

4

1 回答 1

0

您是否尝试过将 WSAQUERYSET 初始化为零?

memset(&qs, 0, sizeof(WSAQUERYSET));

有时系统会将您的 WSAQUERYSET 初始化为垃圾 - 这可能会导致您的缓冲区溢出。

于 2013-01-29T17:49:38.103 回答