Domanda

C'è comunque per verificare se un metodo utilizza Pinvoke? Sto facendo looping attraverso tutti i metodi in un assembly usando metodoBase ma voglio controllare se il metodo sta usando Pinvoke. Ecco il codice che sto usando:

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

Anche se è possibile come può esiste un modo in cui posso verificare la DLL utilizzata e la funzione / entrypoint che viene chiamata?

È stato utile?

Soluzione

È possibile verificare se un metodo è decorato con Dllimportattribute .Se è così, sta usando Pinvoke.

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

Altri suggerimenti

È possibile utilizzare questo metodo di estensione:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top