IDL静态接口

时间:2012-10-15 18:23:44

标签: interface windows-runtime idl

对于WinRT,IDL现在支持如下构造:

[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

主体内列出的接口有何关系?

2 个答案:

答案 0 :(得分:8)

winrt接口上的静态方法实现为该类的类工厂之外的接口。

对于这种情况,你应该打电话(很多winrt开销省略):

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

正如我所提到的,这是伪代码,但它应该足以看到如何调用静态方法。

答案 1 :(得分:5)

COM不支持类的静态方法的概念,所有方法都必须是实例方法,因为接口方法是抽象的。该属性允许语言投影模拟方法的静态行为。特别是DatagramSocket.GetEndpointPairsAsync()重载。

值得注意的是,COM也不支持重载,也使用属性解决。 IDatagramSockeStatics的方法具有[overload]属性,第二个重载的实名是GetEndpointPairsWithSortOptionsAsync()。