C++にATLで記述された32ビットCOMコンポーネントがあります。 64ビット.NETから使用する必要がある場合は、COM +アプリケーションを作成し、すべて正常に動作します。整形式COMインターフェイスでForeachが失敗する
最近、私たちはWin2k8で奇妙な動作に気付きました。コンポーネントのCOMオブジェクトはイベントを発生させ、.NETコードで処理します。このイベントには、アンマネージコードから渡されたパラメータもあります。イベントハンドラがIOurObjectInterfaceインスタンスを渡され
interface IOurCollectionInterface : IDispatch
{
[propget, restricted, id(DISPID_NEWENUM)]]
HRESULT _NewEnum([out, retval] IUnknown** result);
}
interface IOurObjectInterface : IDispatch
{
[propget]
HRESULT Collection([out, retval] IOurCollectionInterface** result);
}
:
は、ここで明確化(IDL表記)のための部分的な定義です。内部でforeach()ループを実行しようとします。次のメッセージとforeachのとライン上の
void onEvent(IOurObjectInterface ourObject)
{
foreach(object element in ourObject.Collection) {
//do stuff
}
}
コードがクラッシュ:IEnumVARIANTため QIは確かで返されるオブジェクトによって実装されて管理されていないサーバー上
IEnumVARIANT
を失敗しましたIOurCollectionInterface::get__NewEnum()
の実装。上記のコードは、WinXPとWin2k3では正常に動作しますが、Win2k8では動作しません。
このような動作の理由は何ですか?
エラーのHRESULTとは何ですか? – Richard