Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET interop COM DLL在VB6调试器中的行为不同_.net_Com_Vb6_Interop - Fatal编程技术网

.NET interop COM DLL在VB6调试器中的行为不同

.NET interop COM DLL在VB6调试器中的行为不同,.net,com,vb6,interop,.net,Com,Vb6,Interop,我有一个.NETV2.0DLL,它向COM公开了一些类。该程序集称为BLogic.DLL 我从一个遗留的VisualBasic6.0应用程序调用这些类。我可以生成和EXE文件,如果我有Blogic.dll在同一个文件夹作为EXE,程序运行没有任何障碍 但是,如果我尝试在VB6调试器中启动相同的程序,我会得到: Automation Error The system cannot find the file specified 我假设在调试器中运行时,找不到PLogic.dl

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

我从一个遗留的VisualBasic6.0应用程序调用这些类。我可以生成和EXE文件,如果我有Blogic.dll在同一个文件夹作为EXE,程序运行没有任何障碍

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

   Automation Error    
   The system cannot find the file specified
我假设在调试器中运行时,找不到PLogic.dll文件。我试着把它放在System32文件夹中,和VB6.EXE文件放在同一个文件夹中,但还是出现了同样的错误

其他可能有帮助的事实:


PLogic.dll不是强名称程序集。这取决于未经强签名的第三方引用,因此VS不允许我对其进行强签名。但是,VB6代码没有调用第三方功能,并且它不可见。

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


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

已经有一段时间了,所以我可能会对此感到困惑,但我有一些内存,在调试支持DLL的VB6时应该在项目中文件夹,因此与项目文件位于同一文件夹中


编辑:刚刚意识到,因为它是一个COM DLL,位置应该不重要,因为它应该已经注册,我不记得如何使用.NET COM DLL,但我建议尝试Regasm,因为它没有强名称,可能您必须创建Tlib,并在其上运行Regtlib。

只是想一想:该错误可能是DLL中的正常异常,而不是互操作问题。只有在VB6.exe中调试时才会发生此异常的原因可能是相对路径。/something.txt在调试时与VB6.exe相对。

请注意:此错误可能是DLL中的正常异常,而不是互操作问题。此异常仅在VB6.exe中调试时发生的原因可能是相对路径。/something.txt在调试时与VB6.exe相对。

如果未将ComVisible.NET程序集放入GAC,则必须将/codebase选项与Regasm.exe一起使用。

如果未将ComVisible.NET程序集放入GAC,则您必须对Regasm.exe使用/codebase选项。我遇到了一个类似的问题,通过创建一个包含以下内容的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>

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

我还尝试了项目文件夹中的PLOGIC.DLL。同样的错误。好吧,当我对COM感到绝望时,我会在注册表中搜索DLL和接口等的任何实例,并删除它们,显然是非常小心的!然后重新启动电脑并重新注册。这不是最好的解决方案,但有时确实有效。我也会考虑JAN的建议,它可能是其他失败的东西,也许可以通过将编译的EXE和DLL移动到一个新文件夹,看看发生了什么。同样的错误。好吧,当我对COM感到绝望时,我会在注册表中搜索DLL和接口等的任何实例,并删除它们,显然是非常小心的!然后重新启动电脑并重新注册。这不是最好的解决方案,但有时确实有效。我也会考虑JAN的建议,它可能是其他失败的东西,也许可以通过把编译的EXE和DLL移到一个新的文件夹中,看看会发生什么。当我从那个程序集创建第一个对象时,就会发生错误。该类的构造函数不引用任何外部文件。实际上,它只设置一个私有字符串成员。不会引发IO异常的内容。当我从该程序集创建第一个对象时,会发生此错误。该类的构造函数不引用任何外部文件。实际上,它只设置一个私有字符串成员。没有任何东西会引发IO异常。如果是这样,为什么我不在vb6 ide调试器中时可以成功运行它?其次,如果我不能对程序集进行强签名,我如何将其放入GAC或使用codebase选项?运行IDE时,EXE文件夹是不同的。使用普通的Regasm.exe命令行,只需添加/codebase.get即可。谢谢我没有意识到您可以忽略使用/codebase选项wh得到的警告
你没有一个强命名的程序集。很好的问题和很好的答案!我想知道为什么我的VB6 DLL在注销并重新注册后停止工作。。。我错过了代码库选项。。。谢谢。如果这是真的,为什么我不在vb6 ide调试器中时可以成功运行它?其次,如果我不能对程序集进行强签名,我如何将其放入GAC或使用codebase选项?运行IDE时,EXE文件夹是不同的。使用普通的Regasm.exe命令行,只需添加/codebase.get即可。谢谢我没有意识到,当您没有强名称程序集时,您可以忽略使用/codebase选项得到的警告。这个问题问得好,回答得好!我想知道为什么我的VB6 DLL在注销并重新注册后停止工作。。。我错过了代码库选项。。。谢谢