Проверьте, использует ли метод PInvoke

Есть ли способ проверить, использует ли метод PInvoke? Я перебираю все методы в сборке с использованием MethodBase, но я хочу проверить, использует ли метод PInvoke. Вот код, который я использую:

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

Также, если это возможно, как можно проверить, используется ли DLL и вызывается ли функция / точка входа?

2 ответа

Решение

Вы можете проверить, украшен ли метод с помощью DllImportAttribute. Если это так, он использует PInvoke.

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

Вы можете использовать этот метод расширения:

    public static bool IsPinvoke(this MethodBase method)
    {
        return method.Attributes.HasFlag(MethodAttributes.PinvokeImpl);
    }
Другие вопросы по тегам