AccessViolationException Lors du Traitement des Formulaires (c0000005)
Lors du traitement des formulaires PDF, IronPDF peut lancer un AccessViolationException natif intermittent (code c0000005) qui ne se reproduit pas de manière fiable, même sur le même fichier d'entrée. Il apparaît le plus souvent lorsque vous accédez à PdfDocument.Form et pendant PdfDocument.Flatten et PdfDocument.Merge.
AccessViolationException (0xc0000005)
bad conversion while widening narrow string
Le crash provient de l'interaction entre les handles de champs de formulaire natifs et la durée de vie des objets gérés. Si le PdfDocument est collecté par le garbage collector ou disposé alors que les opérations de formulaire natif sont toujours en cours, la couche native accède à une mémoire qui a déjà été libérée, ce qui produit la violation d'accès.
Les avertissements répétés 'mauvaise conversion lors de l'élargissement d'une chaîne étroite', ainsi que les avertissements concernant la suppression des annotations de champs de formulaire lors de l'aplatissement, sont un symptôme distinct et bénin. Ils proviennent du décodage des chaînes de champs internes AcroForm et des métadonnées qui contiennent des caractères japonais ou multioctets dans un PDF donné. Ils n'indiquent pas un problème avec le support du japonais ou de l'Unicode en général, ni avec les chemins de fichiers UNC japonais.
Solution
1. Gardez le Document Actif pour l'Opération Complète
Recommandé : conservez le PdfDocument dans la portée pendant toute la durée du traitement du formulaire. Enveloppez-le dans un bloc Using pour que sa durée de vie soit explicite, puis appelez GC.KeepAlive(doc) après la boucle de champ de formulaire, avant que le document ne soit disposé.
Using doc As IronPdf.PdfDocument = IronPdf.PdfDocument.FromFile(tempPdfPath)
For Each field In doc.Form
' Your form field processing here
Next
GC.KeepAlive(doc)
End Using
GC.KeepAlive(doc) empêche l'exécution de collecter le document alors que les opérations de formulaire natif sont toujours en cours, clôturant ainsi la fenêtre dans laquelle le code natif peut accéder à une mémoire libérée.
2. Supprimez les Appels Manuels à GC.Collect()
Supprimez tous les appels à GC.Collect() pendant le traitement des PDF et des formulaires. Forcer la collecte en cours d'opération peut déclencher exactement le problème de durée de vie qui provoque le crash.
3. Visez uniquement x64
Définissez explicitement la cible de la plateforme du projet sur x64, et assurez-vous que Prefer 32-bit est désactivé. Exécuter en tant que x64 évite les contraintes d'un processus 32 bits lors de travaux de formulaire natif.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.