Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Orsak
P/Invoke marshalling code måste genereras i förväg. Om marshallingskoden för en delegerad inte har förgenererats, kommer P/Invoke-marshalling att misslyckas med ett undantag vid körning.
Marshalling-kod genereras för ombudstyper som antingen:
- Används i signaturer för P/Invoke-metoder.
- Visas som fält med typer som skickas till intern kod via P/Invoke.
- Är dekorerade med UnmanagedFunctionPointerAttribute.
Om en konkret typ inte kan härledas från P/Invoke-signaturen kanske marshallingkoden inte är tillgänglig vid körning och P/Invoke utlöser ett undantag.
Ersätt Delegate eller MulticastDelegate i P/Invoke-signaturen med en konkret ombudstyp.
Example
using System;
using System.Runtime.InteropServices;
PinvokeMethod(() => { });
// AOT analysis warning IL3055: Program.<Main>$(String[]): P/invoke method
// 'Program.<<Main>$>g__PinvokeMethod|0_1(Delegate)' declares a parameter with an abstract delegate.
// Correctness of interop for abstract delegates cannot be guaranteed after native compilation:
// the marshalling code for the delegate might not be available. Use a non-abstract delegate type
// or ensure any delegate instance passed as parameter is marked with `UnmanagedFunctionPointerAttribute`.
[DllImport("library")]
static extern void PinvokeMethod(Delegate del);