【发布时间】:2011-11-12 02:03:11
【问题描述】:
如何强制 Excel (2007) VBA 释放对 COM 服务器对象的引用?
我在 Visual Foxpro 9 SP2 中编写了一个进程内(单实例 DLL)COM 服务器,它是从我的开发机器上的 Excel 2007 VBA 代码实例化的。 Excel 似乎持有对 COM 对象/dll 的引用,即使我将它设置为 = 无。这会阻止我重建 DLL,因为“文件访问被拒绝 TestCOM.dll”消息,直到我退出 Excel,每次我想要进行更改并测试它时都很痛苦。
我将代码简化为一个非常简单的测试设置: VFP9 项目(TestCOM)只有一个 .prg 文件,内容如下
DEFINE CLASS TestClass As Session OLEPUBLIC
ENDDEFINE
VBA代码如下:
Sub Test()
Set objTest = CreateObject("TestCOM.TestClass")
Set objTest = Nothing
End Sub
我尝试在 VBA 项目中删除对 COM 服务器库的引用,但这没有任何区别。 我尝试过使用和不使用 DIMing 对象变量,这没有区别。 我已尝试创建一个新的 VFP DLL 项目,但问题仍然存在。
如果我将 VFP 应用程序/dll 构建为 INPROCESS/DLL 并运行 VBA 代码,我会遇到此问题,但如果我将其构建为 OUTOFPROCESS/EXE 并运行 VBA 代码,我不会遇到此问题。
我在COM Object Cleanup 中发现了一个非常相似的问题,除了我的 COM 服务器是用 Visual Foxpro 9 SP2 编写的,而这与 C# 相关,并且 OP 没有详细解释他们如何解决问题,所以我不知道如何绕过它;如果这是可能的话。
【问题讨论】:
-
对于阅读此线程的任何其他人,我随后意识到,如果项目是作为进程外 (EXE) COM 服务器构建的,那么如果您没有引用 VBA/Excel 中的类型库。
标签: excel vba com visual-foxpro