Windows runtime 通过IMetaDataImport的WinRT IDL重载反射

Windows runtime 通过IMetaDataImport的WinRT IDL重载反射,windows-runtime,overloading,idl,Windows Runtime,Overloading,Idl,我不确定这在WinRT中是新的还是以前存在过;在IDL中,您可以编写如下声明: [uuid(E9C62AEE-1494-4A21-BB7E-8589FC751D9D)] [version(0x06020000)] [exclusiveto(Windows.Networking.Sockets.DatagramSocket)] interface IDatagramSocketStatics : IInspectable { [overload("GetEndpointPairsAsync")]

我不确定这在WinRT中是新的还是以前存在过;在IDL中,您可以编写如下声明:

[uuid(E9C62AEE-1494-4A21-BB7E-8589FC751D9D)]
[version(0x06020000)]
[exclusiveto(Windows.Networking.Sockets.DatagramSocket)]
interface IDatagramSocketStatics : IInspectable
{
 [overload("GetEndpointPairsAsync")] HRESULT GetEndpointPairsAsync(
     [in] Windows.Networking.HostName* remoteHostName, 
     [in] HSTRING remoteServiceName, 
     [out] [retval] Windows.Foundation.IAsyncOperation
         <Windows.Foundation.Collections.IVectorView
          <Windows.Networking.EndpointPair*>*>** operation);

 [overload("GetEndpointPairsAsync")] HRESULT GetEndpointPairsWithSortOptionsAsync(
     [in] Windows.Networking.HostName* remoteHostName, 
     [in] HSTRING remoteServiceName, 
     [in] Windows.Networking.HostNameSortOptions sortOptions, 
     [out] [retval] Windows.Foundation.IAsyncOperation
                    <Windows.Foundation.Collections.IVectorView<
                     <Windows.Networking.EndpointPair*>*>** operation);
}
[uuid(E9C62AEE-1494-4A21-BB7E-8589FC751D9D)]
[版本(0x06020000)]
[exclusiveto(Windows.Networking.Socket.DatagramSocket)]
接口IDatagramSocketStatics:IIInspectable
{
[重载(“GetEndpointPairsSync”)]HRESULT GetEndpointPairsSync(
[in]Windows.Networking.HostName*remoteHostName,
[in]hs字符串remoteServiceName,
[Out[[ReVal] ]窗口
**操作);
[重载(“GetEndpointPairsSync”)]HRESULT GetEndpointPairsWithSortOptions异步(
[in]Windows.Networking.HostName*remoteHostName,
[in]hs字符串remoteServiceName,
[在]Windows.Networking.HostNameSortOptions排序选项中,
[Out[[ReVal] ]窗口
**操作);
}
其目的显然是WinRT操作“GetEndpointPairAsync”被重载两次,一次作为GetEndpointPairsSync,一次作为GetEndpointPairsWithSortOptionAsync


是否可以通过IMetaDataImport学习两个底层操作名?为了生成调用这些方法的C代码,我需要找出答案,我从EnumMethods得到的只是重载名称。

重载成员将具有自定义属性,该属性指定重载的唯一名称


您可以调用以枚举方法定义(MethodDef)的自定义属性,识别
OverloadAttribute
(如果存在),并解析其字符串参数以获得唯一名称。

Btw,请注意这些工件(如OverloadAttribute的值)只是低级IDL创作经验的产物。他们在高级创作体验中没有代表性。