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
相关产品推荐
相关产品推荐

