2

ISimpleCom という名前の ATL シンプル オブジェクト インターフェイスがあります。このオブジェクトは接続ポイントを実装します。「通常の」COM メソッド パラメータの前に and 属性を付ける必要があるのに、イベント メソッドには付けないのはなぜだろうと思っていました。

ISimpleCom メソッド:

[id(1)] HRESULT Calculate([in] VARIANT_BOOL a_bFireEvent, [out,retval] LONG* a_lTotalMarks);

_ISimpleComEvents メソッド (イベントの「署名」、「a_lTotalMark」のパラメーターに属性がないことに注意してください): [id(1)] HRESULT TotalMarks(LONG a_lTotalMarks);

Fire_TotalMarks(12); <-- will fire the event in my case to C# manage code
4

2 に答える 2

0

COM の属性は、実行可能な最適化に関する COM ランタイムへのヒントです。たとえば、param が としてマークされている[in]場合、ランタイムは戻り値にメモリを割り当てる必要がないことを認識します。[out]戻り値としてのメモリだけ気にすれば。要するに、コードをより効率的に実行するのに役立つので、それらを使用することは常に良い考えです (接続ポイントまたはメソッド パラメーター)。

また、実行時エラーも防ぎます。たとえば、としてマークされていないパラメーターに値を設定する呼び出された関数[out]は、ランタイムがマーシャリングして戻すことを認識しないため、呼び出し元の関数に期待されていた値を取得しません。

于 2013-10-08T18:38:00.390 に答える