2012-10-15 4 views
3

는, IDL 이제 이와 같은 구조를 지원합니다IDL 정적 인터페이스 WinRT를 들어

[marshaling_behavior(agile)] 
[threading(both)] 
[activatable(0x06020000)] 
[version(0x06020000)] 
[static(Windows.Networking.Sockets.IDatagramSocketStatics, 0x06020000)] 
runtimeclass DatagramSocket 
{ 
    [default] interface Windows.Networking.Sockets.IDatagramSocket; 
    interface Windows.Foundation.IClosable; 
} 

내가 static 속성에 대해 궁금 해요. 무슨 뜻이에요? runtimeclass의 본문 내부에있는 인터페이스와 어떤 관련이 있습니까?

답변

5

COM은 클래스의 정적 메서드 개념을 지원하지 않으므로 인터페이스 메서드는 추상이므로 모든 메서드는 인스턴스 메서드 여야합니다. 속성은 언어 투영이 메소드의 정적 동작을 에뮬레이션 할 수있게합니다. 특히 DatagramSocket.GetEndpointPairsAsync()가 오버로드됩니다.

또한 COM은 또한 특성으로 해결 된 오버로드를 지원하지 않는다는 점이 주목할 만합니다. IDatagramSockeStatics의 메서드에는 [overload] 특성이 있으며 두 번째 오버로드의 실제 이름은 GetEndpointPairsWithSortOptionsAsync()입니다.

8

winrt 인터페이스의 정적 메소드는 해당 클래스의 클래스 팩토리 외부 인터페이스로 구현됩니다.

ComPtr<IDatagramSocketStatics> factory; 
HRESULT hr = RoGetActivationFactory(<HSTRING for Windows.Networking.Sockets.DatagramSocket>, __iidof(IDatagramSocketStatics), &factory.GetAddressOf()); 
hr = factory->DatagramFactoryMethod(<Parameters>); 

내가 언급 한 바와 같이,이 의사 코드이지만, 정적 메서드를 호출하는 방법을 참조하기에 충분해야한다 :

이 경우를 들어, (많은 winrt 오버 헤드 생략) 호출해야합니다.

+0

귀하의 의견은 통계를 호출하는 방법을 알려주기 때문에 유용합니다. 한스의 답변은 문자 그대로 정적 속성의 의미에 대한 나의 질문에 대답했습니다. 그래서 나는 그의 대답을 받아 들였습니다. –

+0

별도의 응답을 준 이유는 Windows.Foundation.Metadata.StaticAttribute' 특성과 관련된 이진 동작을 표현하는 것이기 때문에 이진 동작은 특성에서 전혀 명확하지 않습니다. –

관련 문제