1

これが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);
}

明らかに、WinRT操作「GetEndpointPairAsync」が2回オーバーロードされます。1回はGetEndpointPairsAsyncとして、もう1回はGetEndpointPairsWithSortOptionsAsyncとしてオーバーロードされます。

IMetaDataImportを介して2つの基本的な操作名を学習することは可能ですか?これらのメソッドを呼び出すCコードを生成するために調べる必要があり、EnumMethodsから取得するのはオーバーロードされた名前だけです。

4

1 に答える 1

3

オーバーロードされたメンバーには、オーバーロードOverloadAttributeの一意の名前を指定するカスタム属性があります。

IMetaDataImport::EnumCustomAttributesメソッド定義(MethodDef)のカスタム属性を列挙し、OverloadAttribute存在するかどうかを識別し、その文字列引数を解析して一意の名前を取得するために呼び出すことができます。

于 2012-10-15T20:29:08.093 に答える