Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Oorzaak
P/Aanroepen van marshallcode moet van tevoren worden gegenereerd. Als marshallcode voor een gemachtigde niet vooraf is gegenereerd, mislukt P/Invoke-marshalling met een uitzondering tijdens runtime.
Marshalling-code wordt gegenereerd voor gedelegeerde typen die:
- Worden gebruikt in handtekeningen van P/Invoke-methoden.
- Worden weergegeven als velden van typen die worden doorgegeven aan systeemeigen code via P/Invoke.
- Zijn versierd met UnmanagedFunctionPointerAttribute.
Als een concreet type niet kan worden afgeleid van de P/Invoke-handtekening, is marshallingcode mogelijk niet beschikbaar tijdens runtime en genereert de P/Invoke een uitzondering.
Vervang Delegate of MulticastDelegate in de P/Invoke-handtekening door een specifiek delegeer-type.
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);