4

Server 2008 を評価しています。C++ 実行可能ファイルでこのエラーが発生しています。MSDN でこのエラーを見たことがありますが、以前のいくつかの OS では修正プログラムが必要だったようです。他の誰かがこれを見ましたか?32 ビット OS と 64 ビット OS で同じ結果が得られます。

コードスニペット:

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

GroupDataArray VARIANT 引数は、DCAPICOM_GroupData 構造体エントリをラップする VARIANT の 1 次元 SAFEARRAY をラップします。

// 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として解釈しているため、マーシャリングは失敗し、これが返されるエラーです。これに対処するためにServicePackがリリースされるまでの回避策は、構造体に2バイトを追加して、最大8バイトまでパディングすることです。まだ失敗するインスタンスはこれ以上ありませんが、まだ実行するテストがたくさんあります。

于 2008-09-26T17:16:37.383 に答える
2

最近、DCOM 経由で通信するクライアント/サーバー アプリで同じエラーが発生しました。ネットワーク上を移動する (つまり、ローカルではない) マーシャリングされたインターフェイス ポインタのサイズが変更された (大きくなった) ことが判明しました。コードが CoMarshalInterface などを介して特別なマーシャリングを行っているかどうかを確認したい場合があります。

于 2008-09-15T19:59:03.250 に答える