You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用IXRApplication对应IUnknown的AddRef时崩溃问题排查

COM对象AddRef调用引发栈损坏及崩溃问题排查

我正在调试一个复杂的COM相关问题,目前已将问题范围缩小至以下特定场景:

  • 执行以下代码时运行完全正常:
    XamlRuntimeInitialize(); 
    IXRApplication* pApp; 
    res=GetXRApplicationInstance(&pApp); 
    
  • 调用QueryInterface获取IUnknown接口:
    IUnknown* pUnk; 
    res=pApp->QueryInterface(IID_IUnknown, (void**)&pUnk); 
    
    该调用返回S_OK,但pUnk的地址比pApp小4字节——虽不符合预期,但当时未引发直接问题。
  • 调用AddRef方法:
    UINT cnt=pUnk->AddRef(); 
    
    此调用返回0,后续调用pUnk->Release或pUnk->QueryInterface均会崩溃;即使先调用Release再调用AddRef,后续操作仍会崩溃,疑似AddRef直接销毁了对象,崩溃类型为空引用异常。

补充调试结果:
在WEC7模拟器中调试后找到了问题根源:这个IUnknown的AddRef函数汇编代码如下:

xor eax, eax 
retn 0x0C 

这段代码会直接导致栈损坏,之前偶尔能运行完全是受栈上分配的其他变量影响。目前因可移植性需求,我想避免使用原生封装方案,但纯托管代码似乎无法解决该问题,实在疑惑微软为何会做出这种违反COM规范的实现。

内容的提问来源于stack exchange,提问作者MDK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:27:00