【问题标题】:Issue passing .NET object from VB6 to .NET将 .NET 对象从 VB6 传递到 .NET 的问题
【发布时间】:2017-04-28 05:13:26
【问题描述】:

我们有一个由第三方创建的 .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'"

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

【问题讨论】:

  • 看来问题在于 dll A 是使用 2.0 目标框架创建的,而 dll B 是使用 4.5.1 创建的。不确定是否有一个好的解决方法。我们不想仅仅为了让它工作而返回到较低版本的 .NET。

标签: com vb6 com-interop


【解决方案1】:

您的问题是您所说的不同的 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

【讨论】:

  • 我想知道这是否是 CLR 隔离问题!我只是不认为在这种情况下我可以选择使用配置!没想到把它和VB6.exe一起放进去。非常感谢,完美运行!这为我省去了很多调试上的麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多