2

我创建了一个运行良好的 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 - 据我所知。我已经比较了这两个应用程序的项目设置,但看不到任何异常。我还确保项目中的所有库都使用相同的字符集。

[编辑:发现两个应用程序之间的差异后的变化只是调试器异常是否打开]

我可以继续排除异常并且代码似乎可以运行,但函数中不再有有效的调试符号。这不是崩溃,但当然 id 每次调用函数时都没有异常 - 我显然可以关闭异常中断,但他们不是在那里告诉我有什么问题吗?

我目前正在尝试从 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 
4

1 回答 1

1

我得到了这个例外"0x000006F4: A null reference pointer was passed to the stub."

事实证明,禁用我的第 3 方防火墙阻止了抛出异常。也许防火墙正在拦截请求并搞砸了​​一些事情。

对你来说可能值得一试:)

于 2013-10-22T11:19:16.947 回答