关于Windows Server 2008:COM错误:0x800706F7:Windows Server 2008:COM错误:0x800706F7-存根收到错误的数据

关于Windows Server 2008:COM错误:0x800706F7:Windows Server 2008:COM错误:0x800706F7-存根收到错误的数据

Windows Server 2008: COM error: 0x800706F7 - The stub received bad data

我正在评估Server2008。我的C ++可执行文件出现此错误。 我已经在MSDN上看到此错误,该错误似乎已针对多个先前的OS要求进行热修复。 其他人看到了吗? 对于32和64位操作系统,我得到相同的结果。

程式码片段:

1
2
HRESULT GroupStart([in] short iClientId, [in] VARIANT GroupDataArray,
    [out] short* pGroupInstance, [out] long* pCommandId);

其中GroupDataArray VARIANT参数包装了一维的SAFEARRAY VARIANT,包装了DCAPICOM_GroupData结构条目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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;


与Microsoft开立支持案例后,我现在可以回答我自己的问题。 这是(现在)公认的错误。 问题与在服务器端进行封送有关,但在调用服务器代码之前。 我们的结构长6个字节,但是此COM实现将其解释为8,因此编组失败,这就是您得到的错误。 在发布Service Pack来解决此问题之前,解决方法是在结构中添加两个额外的字节,以将其最多填充8个字节。 我们还没有遇到任何失败的实例,但是仍然有很多测试要做。


我们最近在通过DCOM进行通信的客户端/服务器应用程序中遇到了相同的错误。 事实证明,穿过电线的编组接口指针的大小(即非本地)已更改(变大了)。 您可能想检查您的代码是否正在通过CoMarshalInterface等进行任何特殊的编组。


推荐阅读