Com 将.NET对象从VB6传递到.NET时出现问题

Com 将.NET对象从VB6传递到.NET时出现问题,com,vb6,com-interop,Com,Vb6,Com Interop,我们有一个由第三方创建的.NET dll“a”。它通过tlb向我们的VB6 exe应用程序公开类 我们也有自己的.NET dll“B”,它引用.NET dll“A”。“B”还通过tlb向VB6 exe应用程序公开类 现在,VB6应用程序在VB6代码中使用任何一个库中的类都没有问题,直到我们尝试调用“B”中具有“a”参数类型的函数为止。在这种情况下,我们会得到一个错误430或一个错误,它说“无法将'system.\u comobject'类型的com对象强制转换为'type.From.Dll.A'

我们有一个由第三方创建的.NET dll“a”。它通过tlb向我们的VB6 exe应用程序公开类

我们也有自己的.NET dll“B”,它引用.NET dll“A”。“B”还通过tlb向VB6 exe应用程序公开类

现在,VB6应用程序在VB6代码中使用任何一个库中的类都没有问题,直到我们尝试调用“B”中具有“a”参数类型的函数为止。在这种情况下,我们会得到一个错误430或一个错误,它说“无法将'system.\u comobject'类型的com对象强制转换为'type.From.Dll.A'”


这可能是什么原因造成的?这正常吗?

您的问题在于您所说的不同的网络版本

在版本4中,NET团队引入了

有了它,您可以在应用程序中运行不同版本的CLR

但这不是您想要的,因此我认为您应该使用app.config文件关闭此功能:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
</configuration>


请注意,当您使用VB6 IDE时,需要app.config的进程是VB6.exe,因此我也会将app.config复制到VB6文件夹,并将其重命名为VB6.exe.config

我想知道这是否是CLR隔离问题!我只是觉得在这种情况下我没有选择使用配置!没想到把它和VB6.exe放在一起。非常感谢,工作做得很好!这为我省去了很多调试的麻烦。问题似乎是dll a是用2.0目标框架创建的,而as dll B是用4.5.1创建的。不确定是否有一个很好的解决方法。我们不想为了让它正常工作而返回到较低版本的.NET。