正常に動作する Windows コンソール アプリケーションを作成しましたが、別の静的ライブラリ (より大きなプロジェクトの一部として) で Winsock2 (Ws2_32.lib) を使用しようとすると、例外がスローされます。
コードは正常にコンパイルされ、exe はすべて正常に実行されます。WSAStartup() と gethostbyname() の呼び出しは期待どおりに機能しますが、gethostbyname() を呼び出すと次のようになります。
First-chance exception at 0x76e1c41f in TestApp.exe: 0x000006F4: A null reference pointer was passed to the stub.
これは次のことにつながります。
First-chance exception at 0x7505cd99 (rpcrt4.dll) in TestApp.exe: 0xC0020043: An internal error occurred in RPC.
呼び出しコードが同じであることを再確認し、正しいバージョンの *.h *.dll および *.lib がリンカによって使用されていることを確認しました。2 つのアプリのプロジェクト設定を比較しましたが、異常は見当たりません。また、プロジェクト内のすべてのライブラリが同じ文字セットを使用していることも確認しました。
[編集: 2 つのアプリの違いを発見した後の変化は、デバッガーの例外がオンになっているかどうかだけです]
例外を超えて続行でき、コードは実行されているように見えますが、関数内に有効なデバッグ シンボルがなくなりました。それはクラッシュではありませんが、もちろん、関数を呼び出すたびに例外が発生することはありません.
現在、MSDN シンボル サーバー / SymChk.exe から ws2_32.lib およびその他のモジュールの最新のシンボルを取得しようとしています。
[編集 2 - スタックのシンボルを最終的に取得]
> rpcrt4.dll!_NdrClientCall2() + 0x301 bytes
FWPUCLNT.DLL!_FwppProxyEngineOpen@24() + 0x19 bytes
FWPUCLNT.DLL!_FwppSessionCreate@20() + 0xd1 bytes
FWPUCLNT.DLL!_FwpmEngineOpen0@20() + 0x29 bytes
FWPUCLNT.DLL!_FwpIsNameCacheEnabledForProcess@4() + 0x7778 bytes
FWPUCLNT.DLL!_FwpmProcessNameResolutionEvent0@16() + 0x74 bytes
FWPUCLNT.DLL!_NamespaceCallout@12() + 0x72 bytes
ws2_32.dll!PrepareNamespaceCalloutBlob() + 0x153 bytes
ws2_32.dll!getxyDataEnt() + 0x74a7 bytes
ws2_32.dll!_gethostbyname@4() + 0xe7 bytes