다음을 통해 공유


PreserveSigAttribute 클래스

정의

COM interop 호출 중에 발생하는 HRESULT 서명 변환을 억제해야 함을 나타냅니다.

public ref class PreserveSigAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class PreserveSigAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PreserveSigAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type PreserveSigAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PreserveSigAttribute = class
    inherit Attribute
Public NotInheritable Class PreserveSigAttribute
Inherits Attribute
상속
PreserveSigAttribute
특성

예제

다음 예제에서는 어셈블리를 COM 형식 라이브러리로 내보낼 때 없이 PreserveSigAttribute Tlbexp.exe C# 메서드를 변환하는 방법을 보여 줍니다.

관리되는 서명:

int DoSomething (long l);  

관리되지 않는 서명:

HRESULT DoSomething ([in] long l, [out, retval] int * i);  

동일한 C# 메서드에 적용 PreserveSigAttribute 하고 어셈블리를 내보낼 때 메서드 변환은 이전 예제와 다릅니다. Tlbexp.exe HRESULT 및 [out, retval] 매개 변수 한정자를 제거합니다.

관리되는 서명:

[PreserveSig] int DoSomething (long l);  

관리되지 않는 서명:

int DoSomething ([in] long l);  

설명

메서드에 이 특성을 적용할 수 있습니다.

기본적으로 Tlbexp.exe(형식 라이브러리 내보내기) 는 [out, retval] 매개 변수를 함수 반환 값으로 사용할 수 있도록 S_OK HRESULT를 반환하는 호출이 변환되도록 합니다. S_OK HRESULT는 삭제됩니다. S_OK 이외의 HRESULT의 경우 런타임은 예외를 throw하고 [out, retval] 매개 변수를 삭제합니다. 관리되는 메서드 서명에 를 PreserveSigAttribute 적용하면 특성화된 메서드의 관리 및 관리되지 않는 서명이 동일합니다.

멤버가 둘 이상의 성공 HRESULT 값을 반환하고 다른 값을 검색하려는 경우 원래 메서드 서명을 보존해야 합니다. 대부분의 COM 멤버는 HRESULT를 반환하므로 를 적용하여 PreserveSigAttribute성공 또는 실패 HRESULT를 나타내는 정수 를 검색할 수 있습니다. Tlbexp.exe 모든 [out, retval] 매개 변수를 관리되는 서명의 out 매개 변수로 유지합니다.

Tlbimp.exe(형식 라이브러리 가져오기자)도 이 특성을 적용합니다. 형식 라이브러리를 가져올 때 dispinterfaces에 특성을 적용합니다.

참고

COM에서 관리 코드로 PreserveSigAttribute 상호 운용이 발생하고 관리 코드가 클래스로 PreserveSigAttribute 표시된 경우 , GuidObject 및 의 반환 형식Currency은 클래스에서 지원되지 않습니다. 이러한 조건 중에 클래스와 함께 PreserveSigAttribute 이러한 반환 형식 중 하나를 사용하려고 하면 가 TypeLoadException throw됩니다.

생성자

PreserveSigAttribute()

PreserveSigAttribute 클래스의 새 인스턴스를 초기화합니다.

속성

TypeId

파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다.

(다음에서 상속됨 Attribute)

메서드

Equals(Object)

이 인스턴스가 지정된 개체와 같은지를 나타내는 값을 반환합니다.

(다음에서 상속됨 Attribute)
GetHashCode()

이 인스턴스의 해시 코드를 반환합니다.

(다음에서 상속됨 Attribute)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
IsDefaultAttribute()

파생 클래스에서 재정의된 경우 이 인스턴스 값이 파생 클래스에 대한 기본값인지 여부를 표시합니다.

(다음에서 상속됨 Attribute)
Match(Object)

파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다.

(다음에서 상속됨 Attribute)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다.

(다음에서 상속됨 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다.

(다음에서 상속됨 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1).

(다음에서 상속됨 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다.

(다음에서 상속됨 Attribute)

적용 대상

추가 정보