1

ActiveXコントロールからドラッグ/ドロップアウトしています。ドラッグ時に、ドロップターゲットに情報を渡すためにCOMメソッドが実装されたCComQIPtrを提供します。ドロップ時に、ドロップターゲットのプロセスがCOMメソッドを呼び出して情報を取得します。

そのインターフェイス境界の近くでCRTタイプまたはCRTタイプへのポインタを使用することは許可されていませんか?IDataObjectにプライベートstd::listといくつかのstd::文字列があり、インターフェイスの外部側で、これらのプライベートメンバーにアクセスできるCOMメソッドを呼び出すことができるようにしたいと思います。

私は実際には境界を越えてCRTタイプを渡していないので、大丈夫だと思います。

MSDN:DLLの境界を越えてCRTオブジェクトを渡す潜在的なエラー

4

1 に答える 1

2

com オブジェクトの実装では、それを作成するプロセス (または dll) に常にとどまるため、好きなものを使用できます。

オブジェクトが使用されるプロセスとオブジェクトが作成されたプロセスの間で型をマーシャリングできるように、COM インターフェイスで COM 型に固執する必要があります。

あなたは正しいです。境界を越えて何も渡さないため、この記事はこの状況には当てはまりません。COM インフラストラクチャは、境界を越えた COM 型のマーシャリングを処理します。

COM メソッド内ですべての例外をキャッチするようにしてください。COM インフラストラクチャが例外を処理する方法を認識しないため、それらが関数から漏れることはありません。

個人的には、COM 型と「通常の」型との間の変換を処理し、実際の作業を行うコードを呼び出す COM コードの薄いレイヤーを使用する傾向があります (こちらを参照)。このレイヤーには、すべてをキャッチして適切な HRESULT に変換する例外ハンドラーが含まれています。

于 2010-07-06T15:35:43.090 に答える