Verifique se o método utiliza PInvoke
-
12-12-2019 - |
Pergunta
Existe uma maneira de verificar se um método usa PInvoke ?Eu sou um loop através de todos os métodos em uma montagem usando MethodBase mas quero verificar se o método é usando PInvoke.Aqui está o código que estou usando :
foreach (MethodBase bases in mtd.GetType().GetMethods())
{
//check if the method is using pinvoke
}
Também se é possível, como existe uma maneira que eu possa verificar a DLL que está sendo usada e a função/ponto de entrada que está sendo chamado?
Solução
Você pode verificar para ver se um método está decorado com DllImportAttribute.Se assim for, é usando PInvoke.
foreach (MethodBase methodBase in mtd.GetType().GetMethods())
{
if (methodBase.CustomAttributes.Any(cad => cad.AttributeType == typeof(DllImportAttribute))
{
// Method is using PInvoke
}
}
Outras dicas
Você pode usar esse método de extensão:
public static bool IsPinvoke(this MethodBase method)
{
return method.Attributes.HasFlag(MethodAttributes.PinvokeImpl);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow