0

.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 デバイスへの) 接続は正常に機能しています。デバイス照会のみがクラッシュします。

なぜ私がこのクラッシュを経験しているのか、誰にも分かりますか?

ありがとう、アレク

4

1 に答える 1

0

WSAQUERYSETをゼロに初期化しようとしましたか?

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

システムがWSAQUERYSETをガベージに初期化することがあります。これにより、バッファオーバーランが発生する可能性があります。

于 2013-01-29T17:49:38.103 に答える