You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# COM互操作组件与VB6集成时PDF资源无法释放的问题求助

C# COM互操作组件与VB6集成时PDF资源无法释放的问题求助

我有一个基于.NET Framework 4.8的C# COM互操作库,负责接收数据并生成PDF文件保存到指定位置。这里用到了PDFSharp,需要从现有PDF中提取页面并合并到新文件里,这部分操作没什么问题。另外我还有一个VB6应用,它会实例化这个COM对象并传入生成PDF所需的数据,这部分也正常运行。

现在我遇到的麻烦是资源释放的问题,特别是PDFSharp生成的PDF文件。我在C#里已经写了这些代码:

newDoc.Save(newFile);
newDoc.Dispose();

但在VB6里,我既不能删除也不能覆盖这个PDF文件,不过还能正常读取它(在资源管理器里也没法删除或重命名)。但在我用.NET Framework写的测试程序里就没有这个问题。而且第一次调试时这个PDF文件就被锁定了,调试结束后也不会释放——我必须关闭VB6才能解除文件锁。这说明VB6一直在持有这个资源,哪怕理论上我已经把VB6里的COM对象置为NULL,而且PDFSharp也已经调用了Dispose方法。

我的VB6代码是这样的:

Dim path As String
Dim file As String

path = txtPath.Text
file = txtFile.Text

Dim tst As New ComDLL.Class
'Set tst = New ComDLL.Class
Dim i As Long

i = tst.GeneratePDF(path, file)
txt_OUT.Text = tst.GetErrorMessage

Set tst = Nothing

这段代码也没什么特殊的...

所以到底哪里出问题了?

编辑补充:
再说明下我的COM组件情况:我写的类里有两个方法,就像上面VB6代码里用到的那样。我觉得没必要实现析构函数,因为在这两个方法里已经清理了所有内存引用——真的没什么需要额外清理的了。
我这么做是不是错了?说实话,我接触COM才两周,确实不太熟...

备注:内容来源于stack exchange,提问作者TheKDude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:09:32