.NET互操作COM DLL在VB6调试器中的行为有所不同

时间:2010-05-25 17:59:46

标签: .net com vb6 interop

我有一个.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不是强名称程序集。它取决于没有强烈签名的第三方引用,所以VS不允许我强烈签名。但是,VB6代码不会调用第三方功能,而且它不是ComVisible。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

编辑:刚刚意识到,因为它是一个COM DLL,位置应该无关紧要,因为它应该已经注册,我不记得它是如何工作的.NET COM Dll但我建议尝试Regasm(因为它没有一个强大的名字可能你不得不创建Tlib而且运行Regtlib就可以了。)

答案 2 :(得分:0)

只是一个想法:错误可能是DLL中的“正常”异常,而不是互操作问题。仅在VB6.exe中调试时发生此异常的原因可能是在调试时相对路径(./something.txt)与VB6.exe相关。

答案 3 :(得分:0)

我遇到了类似的问题,可以通过创建包含以下内容的 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>