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?

Foi útil?

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
scroll top