【问题标题】:Com class debug methodCom类调试方法
【发布时间】:2012-01-04 11:04:52
【问题描述】:

我正在使用 Visual Studio 2008 开发 COM 互操作类。 并在 Visual FoxPro 9.0 上使用这些类 当我编译类库时,它在编译后注册。

在 Visual FoxPro 上,我正在命令窗口中使用这段代码创建对象:

newObj = CREATEOBJECT("CemT.Deneme.ClassTest")

当我想在 Visual Studio 上更改类库时,我无法再次编译和注册 dll。它给了我这个错误:

Unable to copy file "obj\Debug\clCOMTest.dll" to "bin\Debug\clCOMTest.dll". The process cannot access the file 'bin\Debug\clCOMTest.dll' because it is being used by another process.

如果出现此错误,我将不得不退出 VFP 并重新开始。在创建对象之前,我正在 Visual Studio 上编译类库。然后我就可以使用最新版本的dll了。

这看起来很正常,因为 VFP 使用了 dll,但是有没有办法在不重新启动 VFP 的情况下做到这一点?

【问题讨论】:

  • DLL 具有硬锁,因为它已加载到 FoxPro 进程中。您必须说服 FoxPro 再次卸载该 DLL。查看文档,您至少需要 RELEASE。你如何让它调用 CoFreeUnusedLibraries() 是任何人的猜测。改为使用单元测试来测试您的代码。
  • 单元测试会很好,但 VFP 会调用 .NET 类。这就是函数调用具有不同类型参数的原因。有时传递不同类型的参数可能很困难或不可能。 RELEASE ALL 使命令窗口中定义的每个变量都为空。但我仍然无法编译,它给出了同样的错误。
  • @HansPassant:单元测试适用于没有像样的图形调试器并带有编辑和继续功能的语言! (笑话:单元测试仍然很好,但它们是能够正确调试的补充)。

标签: c# com foxpro visual-foxpro


【解决方案1】:

在VFP中,你试过了吗

RELEASE LIBRARY {你的 dll 文件}

或者,根据文档,您可以通过

清除所有 API 库

将库设置为

(没有任何特定的库名)清除它们

【讨论】:

    【解决方案2】:

    当我以前做这种类型的事情(C++ COM 组件设计为使用 VB 作为主机)时,我曾经设置“调试”命令行以在 VB 中打开正确的项目。

    换句话说,我在 C++ 调试器中运行 VB 开发环境。

    这很好,因为我仍然可以在我的 DLL 等中设置断点,并同时在 VB 和 C++ 端工作。 (请记住在 VB 中按“保存”,然后在 C++ 中按“停止”!)

    我从未使用过 FoxPro,但您可以使用 -C 选项来做同样的事情:

    http://msdn.microsoft.com/en-us/library/bzb50fbk(v=VS.71).aspx

    【讨论】:

      【解决方案3】:

      如果我在 VFP 中正确理解问题,这很简单,

      发布新对象

      【讨论】:

        【解决方案4】:

        在应用程序关闭之前,VFP 不会从内存中完全释放 COM 对象。

        使用 RELEASE 命令不会完全释放它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-12
          • 2020-06-05
          • 2011-05-13
          • 1970-01-01
          • 1970-01-01
          • 2022-01-22
          • 2011-03-31
          • 1970-01-01
          相关资源
          最近更新 更多