次の方法で共有


Marshal.ReleaseComObject メソッド

提供されたランタイム呼び出し可能ラッパーの参照カウントをデクリメントします。

Public Shared Function ReleaseComObject( _
   ByVal o As Object _) As Integer
[C#]
public static int ReleaseComObject(objecto);
[C++]
public: static int ReleaseComObject(Object* o);
[JScript]
public static function ReleaseComObject(
   o : Object) : int;

パラメータ

  • o
    解放する COM オブジェクト。

戻り値

o に関連付けられているランタイム呼び出し可能ラッパーの参照カウントの新しい値。この値は通常 0 となります。ランタイム呼び出し可能ラッパーは、ラップされた COM オブジェクトへの参照を、それを呼び出しているマネージ クライアントの数に関係なく、1 つしか保持しないためです。

例外

例外の種類 条件
InvalidCastException o が有効な COM オブジェクトではありません。
NullReferenceException o が null 参照 (Visual Basic では Nothing) です。

解説

COM インターフェイス ポインタは、共通言語ランタイムを入力するたびに、ランタイム呼び出し可能ラッパーにラップされます。このラッパーの機能の詳細については、「 ランタイム呼び出し可能ラッパー 」を参照してください。

このメソッドは、マネージ コードで使用する COM オブジェクトの有効期間を明示的に制御するために使用します。リソースへの参照を保持している、基になる COM オブジェクトを適切なタイミングで解放する必要がある場合、またはオブジェクトを特定の順序で解放する必要がある場合は、このメソッドを使用します。

ランタイム呼び出し可能ラッパーは、COM インターフェイス ポインタが割り当てられるたびにインクリメントされる参照カウントを保持しています。 ReleaseComObject メソッドは、ランタイム呼び出し可能ラッパーの参照カウントをデクリメントします。参照カウントがゼロに到達すると、ランタイムはアンマネージ COM オブジェクトのすべての参照を解放し、この後でオブジェクトを使用しようとすると System.NullReferenceException をスローします。同じ COM インターフェイスがアンマネージ コードからマネージ コードに複数回渡された場合、ラッパーの参照カウントは毎回インクリメントされ、 ReleaseComObject を呼び出すと、残りの参照の数が返されます。

メモ   ランタイム呼び出し可能ラッパーと元の COM オブジェクトが確実に解放されるようにするには、ループを作成し、返される参照カウントが 0 になるまで、ループの中でこのメソッドを呼び出します。

メモ   このメソッドは SecurityAction.LinkDemand を使用して、信頼関係のないコードからの呼び出しを防ぎます。 SecurityPermissionAttribute.UnmanagedCode アクセス許可は、直前の呼び出し元にのみ要求されます。信頼性が一部しか確認されていないコードから呼び出すことができるコードの場合、ユーザー入力を検証せずに Marshal クラスに渡すことは避けてください。 LinkDemand メンバの使用に関する重要な制約事項については、「 Demand と LinkDemand 」を参照してください。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

Marshal クラス | Marshal メンバ | System.Runtime.InteropServices 名前空間 | NullReferenceException