4

メソッドが PInvoke を使用しているかどうかを確認する方法はありますか? MethodBase を使用してアセンブリ内のすべてのメソッドをループしていますが、メソッドが PInvoke を使用しているかどうかを確認したいと考えています。ここに私が使用しているコードがあります:

 foreach (MethodBase bases in mtd.GetType().GetMethods())
 {
      //check if the method is using pinvoke
 }

また、可能であれば、使用されている DLL と呼び出されている関数/エントリポイントを確認する方法はありますか?

4

2 に答える 2

5

メソッドがDllImportAttributeで装飾されているかどうかを確認できます。もしそうなら、それは PInvoke を使用しています。

foreach (MethodBase methodBase in mtd.GetType().GetMethods())
{
    if (methodBase.CustomAttributes.Any(cad => cad.AttributeType == typeof(DllImportAttribute))
    {
         // Method is using PInvoke
    }
}
于 2012-10-01T16:27:48.687 に答える
2

この拡張メソッドを使用できます。

    public static bool IsPinvoke(this MethodBase method)
    {
        return method.Attributes.HasFlag(MethodAttributes.PinvokeImpl);
    }
于 2012-12-19T15:20:12.773 に答える