HandleRef 구조체

정의

플랫폼 호출을 사용하여 관리되지 않는 코드에 전달되는 리소스에 대한 핸들을 보유하는 관리되는 개체를 래핑합니다.Wraps a managed object holding a handle to a resource that is passed to unmanaged code using platform invoke.

public value class HandleRef
[System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
type HandleRef = struct
Public Structure HandleRef
상속
HandleRef
특성

설명

중요

.NET Framework 2.0의 기능을 사용 하 여 시작 합니다 HandleRef 클래스 바뀌었습니다를 SafeHandle 클래스와 해당 파생된 클래스도 하는 것으로 CriticalHandle 클래스입니다.Starting with the .NET Framework 2.0, the functionality of the HandleRef class has been replaced by the SafeHandle class and its derived classes, as well as by the CriticalHandle class.

플랫폼을 사용 하는 경우 관리 되는 개체를 호출 하려면 호출 및 플랫폼 호출 후 개체는 다른 곳에서 참조 되지 않은 가비지 수집기에서 관리 되는 개체를 종료할 수에 대 한 가능한 것입니다.If you use platform invoke to call a managed object, and the object is not referenced elsewhere after the platform invoke call, it is possible for the garbage collector to finalize the managed object. 이 작업 리소스를 해제 하 고 무효화 된 핸들에 플랫폼 호출에 실패 합니다.This action releases the resource and invalidates the handle, causing the platform invoke call to fail. 핸들을 사용 하 여 래핑하면 HandleRef 관리 되는 개체가 가비지 수집 플랫폼 호출이 아닙니다 보장 완료 합니다.Wrapping a handle with HandleRef guarantees that the managed object is not garbage collected until the platform invoke call completes. 에 대 한 설명은 플랫폼 호출 서비스를 참조 하십시오 관리 되지 않는 DLL 함수 사용합니다.For a description of platform invoke services, see Consuming Unmanaged DLL Functions.

합니다 HandleRef 값 형식, 예: GCHandle, interop 마샬러를 인식 하는 특수 한 형식입니다.The HandleRef value type, like GCHandle, is a special type recognized by the interop marshaler. 일어나지 않도록된 정상적인 GCHandle 도 차단 가비지 수집이 아직 HandleRef 더 나은 성능을 제공 합니다.A normal, nonpinned GCHandle also prevents untimely garbage collection, yet HandleRef provides better performance. 사용 하더라도 HandleRef 기간 플랫폼 호출에 대 한 개체를 활성화 상태로 유지 하는 것이 좋습니다, 사용할 수도 있습니다는 GC.KeepAlive 같은 목적을 위해 메서드.Although using HandleRef to keep an object alive for the duration of a platform invoke call is preferred, you can also use the GC.KeepAlive method for the same purpose.

합니다 HandleRef 생성자는 두 매개 변수:는 Object 래퍼를 나타내는 및 IntPtr 관리 되지 않는 핸들을 나타내는입니다.The HandleRef constructor takes two parameters: an Object representing the wrapper, and an IntPtr representing the unmanaged handle. Interop 마샬러를 비관리 코드에만 핸들을 전달 하 고 래퍼 보장 (의 생성자에 첫 번째 매개 변수로 전달 합니다 HandleRef) 호출의 기간 동안 유지 합니다.The interop marshaler passes only the handle to unmanaged code, and guarantees that the wrapper (passed as the first parameter to the constructor of the HandleRef) remains alive for the duration of the call.

생성자

HandleRef(Object, IntPtr)

래핑할 개체와 비관리 코드가 사용하는 리소스 핸들을 사용하여 HandleRef 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the HandleRef class with the object to wrap and a handle to the resource used by unmanaged code.

속성

Handle

리소스 핸들을 가져옵니다.Gets the handle to a resource.

Wrapper

리소스 핸들을 보유하고 있는 개체를 가져옵니다.Gets the object holding the handle to a resource.

메서드

ToIntPtr(HandleRef)

HandleRef 개체의 내부 정수 표현을 반환합니다.Returns the internal integer representation of a HandleRef object.

연산자

Explicit(HandleRef to IntPtr)

지정된 HandleRef 개체의 리소스 핸들을 반환합니다.Returns the handle to a resource of the specified HandleRef object.

적용 대상

추가 정보