4

我正在评估 Server 2008。我的 C++ 可执行文件出现此错误。我在 MSDN 上看到了这个错误,似乎需要对以前的几个操作系统进行热修复。还有人看到这个吗?对于 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;
4

2 回答 2

3

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

于 2008-09-26T17:16:37.383 回答
2

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

于 2008-09-15T19:59:03.250 回答