将.NET对象从VB6传递给.NET

时间:2016-12-13 07:57:42

标签: com vb6 com-interop

我们有一个.NET dll" A"这是由第三方创建的。它通过tlb将类暴露给我们的VB6 exe应用程序。

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

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

可能导致这种情况的原因是什么?这是正常的吗?

1 个答案:

答案 0 :(得分:2)

你问题是你说的不同的.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。配置。 See this answer