.NET アプリケーションによって読み込まれるいくつかの Bluetooth 機能を実装する C++/CLI dll があります。dll が .NET 3.5 でコンパイルされている場合 (アプリケーションも同様)、すべて正常に動作します。
dll を .NET 4.0 (VS 2010) およびプラットフォーム ツールセット v100 (VS2010) に更新しました。もちろん、アプリケーションは同じバージョンの .NET Framework に更新されています。それ以来、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 を確認するとバッファ オーバーラン) です。
ブロブを追加して(照会期間を指定するため)など、すべてを試しましたが、問題は解決しません。
Winsock は正しく初期化されており、(BT SPP デバイスへの) 接続は正常に機能しています。デバイス照会のみがクラッシュします。
なぜ私がこのクラッシュを経験しているのか、誰にも分かりますか?
ありがとう、アレク