PreserveSigAttribute 클래스
COM interop 호출 중에 발생하는 HRESULT 또는 retval 시그니처 변환을 생략해야 함을 나타냅니다.
네임스페이스: System.Runtime.InteropServices
어셈블리: mscorlib(mscorlib.dll)
구문
‘선언
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Method, Inherited:=False)> _
Public NotInheritable Class PreserveSigAttribute
Inherits Attribute
‘사용 방법
Dim instance As PreserveSigAttribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets.Method, Inherited=false)]
public sealed class PreserveSigAttribute : Attribute
[ComVisibleAttribute(true)]
[AttributeUsageAttribute(AttributeTargets::Method, Inherited=false)]
public ref class PreserveSigAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */
/** @attribute AttributeUsageAttribute(AttributeTargets.Method, Inherited=false) */
public final class PreserveSigAttribute extends Attribute
ComVisibleAttribute(true)
AttributeUsageAttribute(AttributeTargets.Method, Inherited=false)
public final class PreserveSigAttribute extends Attribute
설명
이 특성을 메서드에 적용할 수 있습니다.
기본적으로 형식 라이브러리 내보내기(Tlbexp.exe)는 S_OK HRESULT를 반환하는 호출을 변환하여 [out, retval] 매개 변수가 함수 반환 값으로 사용되도록 합니다. S_OK HRESULT는 삭제됩니다. S_OK 이외의 HRESULT에 대해서는 런타임에서 예외를 throw하고 [out, retval] 매개 변수를 삭제합니다. PreserveSigAttribute를 관리되는 메서드 시그니처에 적용하면 특성 사용 메서드의 관리되는 시그니처와 관리되지 않는 시그니처가 동일합니다.
멤버가 성공 HRESULT 값을 두 개 이상 반환할 경우 서로 다른 값을 검색하려면 원본 메서드 시그니처를 유지해야 합니다. 대부분의 COM 멤버는 HRESULT를 반환하므로 PreserveSigAttribute를 적용하여 성공 또는 실패 HRESULT를 나타내는 정수를 검색할 수 있습니다. Tlbexp.exe는 관리되는 시그니처에서 모든 [out, retavl] 매개 변수를 out 매개 변수로 유지합니다.
또한 형식 라이브러리 가져오기(Tlbimp.exe)는 형식 라이브러리를 가져올 때 dispinterface에 이 특성을 적용합니다.
참고
COM에서 관리 코드로 상호 운용이 발생하고 관리 코드가 PreserveSigAttribute 클래스로 표시된 경우 Currency, Guid 및 Object의 반환 형식은 PreserveSigAttribute 클래스에서 지원되지 않습니다. 이러한 경우 PreserveSigAttribute 클래스와 이 반환 형식 중 하나를 함께 사용하려고 하면 TypeLoadException이 throw됩니다.
예제
다음 예제에서는 Tlbexp.exe가 COM 형식 라이브러리로 어셈블리를 내보낼 때 PreserveSigAttribute 없이 C# 메서드를 변환하는 방법을 보여 줍니다.
관리되는 시그니처:
int DoSomething (long l);
관리되지 않는 시그니처:
HRESULT DoSomething ([in] long l, [out, retval] int * i);
PreserveSigAttribute를 위 예제와 같은 C# 메서드에 적용하고 어셈블리를 내보낼 때는 메서드 변환이 이전 예제와는 다릅니다. Tlbexp.exe가 HRESULT 및 [out, retval] 매개 변수 한정자를 제거합니다.
관리되는 시그니처:
[PreserveSig] int DoSomething (long l);
관리되지 않는 시그니처:
int DoSomething ([in] long l);
상속 계층 구조
System.Object
System.Attribute
System.Runtime.InteropServices.PreserveSigAttribute
스레드로부터의 안전성
이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
플랫폼
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
.NET Compact Framework
2.0에서 지원
참고 항목
참조
PreserveSigAttribute 멤버
System.Runtime.InteropServices 네임스페이스