将 .NET 对象从 VB6 传递到 .NET 的问题

Issue passing .NET object from VB6 to .NET

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

我们还有自己的 .NET dll "B" 引用了 .NET dll "A"。 "B" 还通过 tlb 将 类 公开给我们的 VB6 exe 应用程序。

现在,VB6 应用程序在 VB6 代码中使用任一库中的 类 都没有问题,直到我们尝试调用 "B" 中具有来自 "A" 的参数类型的函数.在这种情况下,我们会收到错误 430 或错误 "unable to cast com object of type 'system.__comobject' to type 'Type.From.Dll.A'"

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

你的问题是你说的不同的NET版本。

在版本 4 中,NET 团队引入了 In-Process Side-by-Side Execution

有了这个,您可以在您的应用程序中拥有不同版本的 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。 See this answer