【问题标题】:.NET interop COM DLL behaves differently in VB6 debugger.NET 互操作 COM DLL 在 VB6 调试器中的行为不同
【发布时间】:2010-05-25 17:59:45
【问题描述】:

我有一个 .NET v2.0 Dll,它向 COM 公开了一些类。该程序集称为 BLogic.DLL

我从旧版 Visual Basic 6.0 应用程序中调用这些类。我可以生成 EXE 文件,如果我在与 EXE 相同的文件夹中有 Blogic.dll,则程序运行顺利。

但是,如果我尝试在 VB6 调试器中启动相同的程序,我会得到:

   Automation Error    
   The system cannot find the file specified

我假设当我在调试器中运行时,找不到 PLogic.dll 文件。我试着把它放在 System32 文件夹中,和 VB6.EXE 文件相同的文件夹,但我仍然得到同样的错误。

其他可能有帮助的事实:

PLogic.dll 不是强命名程序集。这取决于未强烈签名的第 3 方参考,因此 VS 不允许我对其进行强烈签名。但是 VB6 代码没有调用 3rd 方功能,并且它不是 ComVisible。

【问题讨论】:

    标签: .net com vb6 interop


    【解决方案1】:

    如果您没有将 ComVisible .NET 程序集放在 GAC 中,那么您必须将 /codebase 选项与 Regasm.exe 一起使用

    【讨论】:

    • 如果是真的,为什么我不在vb6 ide调试器中可以成功运行呢?其次,如果我不能对程序集进行强烈签名,我该如何将它放入 GAC 或使用代码库选项?
    • 运行IDE时EXE文件夹不同。使用普通的 Regasm.exe 命令行,只需添加 /codebase。
    • 搞定了。谢谢。我没有意识到,当您没有强名称程序集时,您可以忽略使用 /codebase 选项收到的警告。
    • 好问题和好答案!我想知道为什么我的 VB6 dll 在取消注册并重新注册后停止工作......我错过了代码库选项......谢谢。
    【解决方案2】:

    已经有一段时间了,所以我可能对此感到困惑,但我有一些记忆,在调试 VB6 支持的 dll 时应该在项目文件夹中,因此在与项目文件相同的文件夹中。

    编辑:刚刚意识到,因为它是一个 COM DLL,位置应该无关紧要,因为它应该已经注册,我不记得它是如何与 .NET COM Dlls 一起工作的,但我建议尝试 Regasm(因为它没有一个强大的名称,可能您必须创建 Tlib 并在其上运行 Regtlib)。

    【讨论】:

    • 我也尝试了项目文件夹中的 PLOGIC.DLL。同样的错误。
    • 好吧,当我对 COM 感到绝望时,我会在注册表中搜索 DLL 和接口等的任何实例并删除它们(显然要非常小心!)然后重新启动 PC 并执行新注册。不是最好的解决方案,但有时它会起作用。我还会考虑 Jan 的建议,即它可能是其他故障,也许可以通过将编译的 exe 和 dll 移动到新文件夹来尝试,看看会发生什么。
    【解决方案3】:

    只是一个想法:错误可能是 DLL 中的“正常”异常,而不是互操作问题。只有在VB6.exe中调试才会出现这个异常的原因可能是调试时相对路径(./something.txt)是相对于VB6.exe的。

    【讨论】:

    • 当我从该程序集创建我的第一个对象时发生错误。该类的构造函数不引用任何外部文件。事实上,它只是设置了一个私有字符串成员。没有什么会引发 IO 异常。
    【解决方案4】:

    我有一个类似的问题,通过创建具有以下内容的 VB6.exe.config 文件并将其放在与 VB6.exe 相同的文件夹中( C:\Program Files\Microsoft Visual Studio\VB98 在我的电脑上):

    <?xml version="1.0" ?>
    <configuration>
        <startup>
            <supportedRuntime version="v2.0.50727" />
        </startup>
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2022-01-22
      • 2011-02-25
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      相关资源
      最近更新 更多