对于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
答案 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()。