静态lib调用错误:异常:“将空引用指针传递给存根。” (使用winsock2 Win32)

时间:2013-06-21 20:06:02

标签: c++ winapi visual-studio-2008 winsock2

我创建了一个工作正常的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 

1 个答案:

答案 0 :(得分:1)

我收到此异常"0x000006F4: A null reference pointer was passed to the stub."

结果禁用我的第三方防火墙停止抛出异常。也许防火墙正在拦截请求并弄乱一些东西。

可能值得一试:)