我有一个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设备)工作正常。只有设备查询崩溃。
有没有人知道我为什么遇到这次崩溃?
谢谢, 阿列克
答案 0 :(得分:0)
您是否尝试过将WSAQUERYSET初始化为零?
memset(&qs, 0, sizeof(WSAQUERYSET));
有时系统会将您的WSAQUERYSET初始化为垃圾 - 这可能导致您的缓冲区溢出。