对于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主体中列出的接口有什么关系
发布于 2012-10-16 02:44:46
COM不支持类的静态方法的概念,所有方法都必须是实例方法,因为接口方法是抽象的。该属性允许语言投影模拟方法的静态行为。特别是DatagramSocket.GetEndpointPairsAsync()重载。
同样值得注意的是,COM也不支持重载,这也是通过一个属性解决的。IDatagramSockeStatics的方法有重载属性,第二个重载的真实名称是GetEndpointPairsWithSortOptionsAsync()。
发布于 2012-10-16 08:20:09
winrt接口上的静态方法被实现为该类的类工厂外的接口。
对于这种情况,您应该调用(省去了很多winrt开销):
ComPtr<IDatagramSocketStatics> factory;
HRESULT hr = RoGetActivationFactory(<HSTRING for Windows.Networking.Sockets.DatagramSocket>, __iidof(IDatagramSocketStatics), &factory.GetAddressOf());
hr = factory->DatagramFactoryMethod(<Parameters>);正如我所提到的,这是伪代码,但是看一下如何调用静态方法就足够了。
https://stackoverflow.com/questions/12901689
复制相似问题