首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDL静态接口

IDL静态接口
EN

Stack Overflow用户
提问于 2012-10-16 02:23:44
回答 2查看 1.6K关注 0票数 3

对于WinRT,IDL现在支持这样的构造:

代码语言:javascript
复制
[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主体中列出的接口有什么关系

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-16 02:44:46

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

同样值得注意的是,COM也不支持重载,这也是通过一个属性解决的。IDatagramSockeStatics的方法有重载属性,第二个重载的真实名称是GetEndpointPairsWithSortOptionsAsync()。

票数 5
EN

Stack Overflow用户

发布于 2012-10-16 08:20:09

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

对于这种情况,您应该调用(省去了很多winrt开销):

代码语言:javascript
复制
ComPtr<IDatagramSocketStatics> factory;
HRESULT hr = RoGetActivationFactory(<HSTRING for Windows.Networking.Sockets.DatagramSocket>, __iidof(IDatagramSocketStatics), &factory.GetAddressOf());
hr = factory->DatagramFactoryMethod(<Parameters>);

正如我所提到的,这是伪代码,但是看一下如何调用静态方法就足够了。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12901689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档