다음을 통해 공유


Marshal.ReleaseComObject(Object) 메서드

정의

지정된 COM 개체와 연결된 지정된 RCW(런타임 호출 가능 래퍼)의 참조 횟수를 감소시킵니다.

public:
 static int ReleaseComObject(System::Object ^ o);
[System.Security.SecurityCritical]
public static int ReleaseComObject (object o);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static int ReleaseComObject (object o);
public static int ReleaseComObject (object o);
[<System.Security.SecurityCritical>]
static member ReleaseComObject : obj -> int
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member ReleaseComObject : obj -> int
static member ReleaseComObject : obj -> int
Public Shared Function ReleaseComObject (o As Object) As Integer

매개 변수

o
Object

해제할 COM 개체입니다.

반환

o와 연결된 RCW 참조 횟수의 새 값입니다. RCW는 참조를 호출하는 관리되는 클라이언트의 수에 관계없이 래핑된 COM 개체에 대한 참조를 하나만 유지하므로 일반적으로 이 값은 0이 됩니다.

특성

예외

o가 올바른 개체 범위가 아닌 경우

o이(가) null인 경우

설명

이 메서드는 관리 코드에서 사용되는 COM 개체의 수명을 명시적으로 제어하는 데 사용됩니다. 이 메서드를 사용하여 리소스에 대한 참조를 적시 또는 특정 순서로 해제해야 하는 경우 리소스에 대한 참조를 보유하는 기본 COM 개체를 해제해야 합니다.

COM 인터페이스 포인터가 CLR(공용 언어 런타임)에 들어갈 때마다 RCW로 래핑됩니다.

RCW에는 COM 인터페이스 포인터가 매핑될 때마다 증가되는 참조 수가 있습니다. 메서드는 ReleaseComObject RCW의 참조 수를 감소합니다. 참조 수가 0에 도달하면 런타임은 관리되지 않는 COM 개체에 대한 모든 참조를 해제하고 개체를 추가로 사용하려고 하면 을 throw합니다 System.NullReferenceException . 동일한 COM 인터페이스가 관리되지 않는 코드에서 관리 코드로 두 번 이상 전달되면 래퍼의 참조 수가 매번 증가하고 호출 ReleaseComObject 하면 나머지 참조 수가 반환됩니다.

이 메서드를 사용하면 RCW 참조 횟수 릴리스를 강제로 적용하여 원하는 때 정확하게 발생하도록 할 수 있습니다. 그러나 잘못 사용 ReleaseComObject 하면 애플리케이션이 실패 또는 액세스 위반이 발생할 수 있습니다.

애플리케이션 도메인에서 관리 되는 코드는 COM 구성 요소를 나타내는 RCW에 유지 하는 시나리오를 고려해 보세요. RCW에서 메서드를 ReleaseComObject 호출하는 경우 관리 코드는 RCW에 액세스할 수 없으며 예외가 발생합니다 InvalidComObjectException .

RCW가 릴리스될 때 RCW에 대한 호출이 실행되는 경우 더 심각한 오류가 발생할 수 있습니다. 이 경우 호출하는 스레드가 액세스 위반을 일으킬 가능성이 있습니다. 그러나 프로세스 메모리가 손상될 수 있으며 디버그하기가 매우 어려운 이유로 실패할 때까지 프로세스가 계속 실행될 수 있습니다.

이 위험은 사용 중인 COM 구성 요소가 싱글톤일 때 복잡합니다. CLR은 COM CoCreateInstance 함수를 호출하여 COM 구성 요소를 활성화합니다. 이 함수는 싱글톤 COM 구성 요소에 대해 호출될 때마다 동일한 인터페이스 포인터를 반환합니다. 따라서 개별적이 고 독립적인 애플리케이션 도메인에서 관리 되는 코드 조각을 사용할 수 있습니다 동일한 RCW는 단일 COM 구성 요소에 대 한 경우 및 하나의 호출을 ReleaseComObject COM 구성 요소에서 메서드를 다른가 중단 됩니다.

따라서 반드시 필요한 경우에만 를 ReleaseComObject 사용합니다. 이 메서드를 호출하여 COM 구성 요소가 결정된 시간에 해제되도록 하려면 메서드를 FinalReleaseComObject 대신 사용하는 것이 좋습니다. FinalReleaseComObject 는 CLR을 다시 입력한 횟수에 관계없이 기본 COM 구성 요소를 해제합니다. RCW의 내부 참조 수는 COM 구성 요소가 CLR에 다시 들어갈 때마다 하나씩 증가합니다. 따라서 반환된 값이 ReleaseComObject 0이 될 때까지 루프에서 메서드를 호출할 수 있습니다. 이렇게 하면 메서드와 동일한 결과를 얻을 수 있습니다 FinalReleaseComObject .

적용 대상

추가 정보