Controlla se il metodo utilizza Pinvoke
-
12-12-2019 - |
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?
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