我们有一个.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'"
可能导致这种情况的原因是什么?这是正常的吗?
答案 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