Check if the method uses PInvoke

274 views Asked by At

Is there anyway to check if a method uses PInvoke ? I'm looping through all the methods in an assembly using MethodBase but I want to check if the method is using PInvoke. Here is the code I'm using :

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

Also if it is possible how can is there a way I can check for the DLL being used and the function/entrypoint that is being called?

2

There are 2 answers

0
Reed Copsey On BEST ANSWER

You can check to see if a method is decorated with DllImportAttribute. If so, it's using PInvoke.

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

You can use this extension method:

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