IUnknown インターフェイスの実装
適用対象: Outlook 2013 | Outlook 2016
すべての MAPI オブジェクトに実装されている IUnknown インターフェイスのメソッドは、オブジェクト間通信とオブジェクト管理をサポートします。
IUnknown には、 IUnknown::AddRef、 IUnknown::QueryInterface、 IUnknown::Release の 3 つのメソッドがあります。 QueryInterface を使用すると、あるオブジェクトが別のオブジェクトが特定のインターフェイスをサポートしているかどうかを判断できます。 QueryInterface を使用すると、互いの機能に関する事前知識のない 2 つのオブジェクトが対話できます。 QueryInterface を実装するオブジェクトが対象のインターフェイスをサポートしている場合は、インターフェイスの実装へのポインターを返します。 オブジェクトが要求されたインターフェイスをサポートしていない場合は、MAPI_E_INTERFACE_NOT_SUPPORTED値が返されます。
QueryInterface が要求されたインターフェイス ポインターを返す場合は、新しいオブジェクトの参照カウントも増やす必要があります。 オブジェクトの参照カウントは、オブジェクトの有効期間を管理するために使用される数値です。 参照カウントが 1 より大きい場合、オブジェクトのメモリはアクティブに使用されているため解放できません。 参照カウントが 0 に低下した場合にのみ、オブジェクトを安全に解放できます。
他の 2 つの IUnknown メソッドである AddRef メソッドと Release メソッドは、参照カウントを管理します。 AddRef は参照カウントをインクリメントし、 Release は参照カウントをデクリメントします。 QueryInterface などのインターフェイス ポインターを返すすべてのメソッドまたは API 関数は、参照カウントをインクリメントするために AddRef を呼び出す必要があります。 インターフェイス ポインターを受け取るメソッドのすべての実装では、ポインターが不要になったときにカウントを減らすために Release を呼び出す必要があります。 リリース では、既存の参照カウントがチェックされ、インターフェイスに関連付けられているメモリが解放されるのは、カウントが 0 の場合のみです。
注:
正確な値を返すために AddRef と Release は必要ないため、これらのメソッドの呼び出し元は戻り値を使用して、オブジェクトがまだ有効か破棄されたかを判断する必要があります。