我有一个.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。
答案 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>