2010-05-25 93 views
1

我有一个.NET 2.0 DLL,它暴露了几类COM。该组件被称为BLogic.DLL.NET互操作COM DLL中表现不同VB6调试

我打电话从一个传统的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。

回答

5

如果你不把在GAC您的标记有ComVisible特性.NET程序集,那么你必须使用/基本代码选项与Regasm.exe

+0

如果这是真的,为什么我不能在vb6 IDE调试器中成功运行它? 其次,如果我不能强烈签署组装我怎么能要么把它在GAC或使用代码库选项? – Aheho 2010-05-25 18:54:24

+0

运行IDE时,EXE文件夹不同。使用正常的Regasm.exe命令行,只需添加/ codebase。 – 2010-05-25 19:06:01

+0

得到它的工作。谢谢。我没有意识到,当你没有一个强命名的程序集时,你可以忽略你使用/ codebase选项得到的警告。 – Aheho 2010-05-25 19:30:28

0

它已经有一段时间,所以我可能会得到这个困惑,但我有一些记忆,虽然调试VB6支持DLL应在项目文件夹,所以在同一文件夹中的项目文件。

编辑:刚刚意识到,因为它是一个COM DLL,位置应该不重要,因为它应该已经注册,我不记得那是如何与.NET COM Dll一起工作的,但我建议尝试Regasm因为它没有得到一个强有力的名字,所以你必须创建Tlib,然后运行Regtlib)。

+0

我已经跑了regasm 我使用了/ tlb和/ verbose选项 – Aheho 2010-05-25 18:16:50

+0

也尝试了项目文件夹中的PLOGIC.DLL。同样的错误。 – Aheho 2010-05-25 18:18:04

+0

好吧,当我不顾一切有关COM我会通过注册表搜索DLL和接口等的任何实例并删除它们(显然非常小心!),然后重新启动电脑,做一个新的注册。不是最好的解决方案,但有时它可行。我还会考虑Jan的建议,认为它可能是其他的失败,也许可以通过将你的编译后的exe和dll移动到一个新的文件夹来看看会发生什么。 – 2010-05-25 18:25:29

0

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

+0

当我从该程序集创建我的第一个对象时发生该错误。该类的构造函数不引用任何外部文件。实际上,它只是设置一个私有字符串成员。什么都不会抛出IO异常。 – Aheho 2010-05-25 18:21:33

0

我这是通过创建一个VB6.EXE解决了类似的问题的.config文件包含以下内容并把它放在同一个文件夹VB6.EXEC:\ Program Files文件\微软在我的电脑上的Visual Studio \ VB98):

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