Check if the method uses PInvoke
-
12-12-2019 - |
Question
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?
Solution
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
}
}
OTHER TIPS
You can use this extension method:
public static bool IsPinvoke(this MethodBase method)
{
return method.Attributes.HasFlag(MethodAttributes.PinvokeImpl);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow