Windows Server 2008:COM错误:0x800706F7-存根接收到错误的数据
时间:2020-03-05 18:54:07 来源:igfitidea点击:
我正在评估Server2008. 我的C ++可执行文件出现此错误。我已经在MSDN上看到了此错误,该错误似乎已针对多个先前的OS进行了修补。其他人看到了吗?对于32和64位操作系统,我得到相同的结果。
程式码片段:
HRESULT GroupStart([in] short iClientId, [in] VARIANT GroupDataArray, [out] short* pGroupInstance, [out] long* pCommandId);
其中GroupDataArray VARIANT参数包装了一维的SAFEARRAY VARIANT,包装了DCAPICOM_GroupData结构条目:
// DCAPICOM_GroupData [ uuid(F1FE2605-2744-4A2A-AB85-1E1845C280EB), helpstring("removed") ] typedef struct DCAPICOM_GroupData { [helpstring("removed")] long m_lImageID; [helpstring("removed")] unsigned char m_ucHeadID; [helpstring("removed")] unsigned char m_ucPlateID; } DCAPICOM_GroupData;
解决方案
回答
我们最近在通过DCOM进行通信的客户端/服务器应用程序中遇到了相同的错误。事实证明,经过电线的编组接口指针的大小(即非本地)已更改(变大了)。我们可能想检查代码是否正在通过CoMarshalInterface等进行任何特殊的编组。
回答
与Microsoft开立支持案例后,我现在可以回答我自己的问题。这是(现在)公认的错误。问题与在服务器端进行封送有关,但在调用服务器代码之前。我们的结构长6个字节,但是此COM实现将其解释为8,因此编组失败,这就是我们得到的错误。在发布Service Pack来解决此问题之前,解决方法是在结构中添加两个额外的字节,以将其最多填充8个字节。我们还没有遇到任何其他失败的实例,但是我们仍然需要进行大量测试。