静态库调用错误:异常:"A null reference pointer was passed to the stub."(使用 winsock2 Win32)

static lib call error: Exception: "A null reference pointer was passed to the stub." (using winsock2 Win32)

本文关键字:the to stub 使用 Win32 winsock2 passed pointer 错误 调用 异常      更新时间:2023-10-16

我创建了一个运行良好的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和其他模块的最新符号

[EDIT 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 

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

事实证明,禁用我的第三方防火墙阻止了引发异常。也许防火墙正在拦截请求并将某些事情搞砸。

可能值得一试:)

相关文章: