检查方法是否使用PInvoke

时间:2012-10-01 16:25:30

标签: c# pinvoke system.reflection methodbase

无论如何检查方法是否使用PInvoke? 我正在使用MethodBase循环遍历程序集中的所有方法,但我想检查该方法是否使用PInvoke。 这是我正在使用的代码:

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

另外,如果有可能,我怎样才能检查正在使用的DLL和被调用的函数/入口点?

2 个答案:

答案 0 :(得分:5)

您可以检查方法是否使用DllImportAttribute进行修饰。如果是这样,那就是使用PInvoke。

foreach (MethodBase methodBase in mtd.GetType().GetMethods())
{
    if (methodBase.CustomAttributes.Any(cad => cad.AttributeType == typeof(DllImportAttribute))
    {
         // Method is using PInvoke
    }
}

答案 1 :(得分:2)

您可以使用此扩展方法:

    public static bool IsPinvoke(this MethodBase method)
    {
        return method.Attributes.HasFlag(MethodAttributes.PinvokeImpl);
    }