我创建了一个工作正常的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的正确版本 - 据我所知。 我已经比较了两个应用程序的项目设置,无法看到任何不寻常的东西。 我还确保项目中的所有库都使用相同的字符集。
[编辑:发现两个应用程序之间的区别只是启用或不启用调试器异常]
我可以继续通过异常并且代码似乎运行,但我在函数中不再有有效的调试符号。它不是一个崩溃,但当然我不是每次调用函数时都没有异常 - 我显然可以将异常中断,但不是他们在那里告诉我出错了吗?
我目前正在尝试从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
答案 0 :(得分:1)
我收到此异常"0x000006F4: A null reference pointer was passed to the stub."
结果禁用我的第三方防火墙停止抛出异常。也许防火墙正在拦截请求并弄乱一些东西。
可能值得一试:)