表单处理期间的AccessViolationException (c0000005)

This article was translated from English: Does it need improvement?
Translated
View the article in English

在处理PDF表单时,IronPDF可能会抛出间歇性的本机PdfDocument.Merge期间出现。

AccessViolationException (0xc0000005)
bad conversion while widening narrow string

崩溃来自于本机表单字段句柄与托管对象生命周期之间的交互。如果PdfDocument在本机表单操作仍在进行时被垃圾回收或处置,本机层会访问已被释放的内存,从而导致访问冲突。

反复出现的"加宽窄字符串时转换错误"警告,以及在平坦化过程中关于移除表单字段注释的警告,是单独且无害的症状。 它们来自于解码内部AcroForm字段字符串和包含日语或多字节字符的元数据。 它们并不意味着日语或Unicode支持有问题,也不意味着日语UNC文件路径有问题。

解决方案

1. 在整个操作过程中保持文档活跃

推荐:在整个表单处理期间,将PdfDocument保留在作用域内。 将其包装在GC.KeepAlive(doc)

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
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
VB .NET

GC.KeepAlive(doc)防止在本机表单操作仍在运行时运行时收集文档,关闭本机代码可能命中释放内存的窗口。

2. 删除手动GC.Collect()调用

在PDF和表单处理中删除任何GC.Collect()调用。 强制在操作中间进行收集可能会触发导致崩溃的确切生命周期问题。

3. 仅以x64为目标

明确将项目平台目标设置为x64,并确保首选32位被禁用。 以x64运行避免了在本机表单工作期间的32位进程的约束。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 20,296,129 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPdf
运行示例看着你的HTML代码变成PDF文件。