【问题标题】:Run-time error -2146234341 (8013101b) Automation error from VB.NET to VB6, using manifest?运行时错误 -2146234341 (8013101b) 从 VB.NET 到 VB6 的自动化错误,使用清单?
【发布时间】:2012-07-13 11:26:58
【问题描述】:

我正在尝试在无 reg 的情况下从 VB6 客户端访问 VB.NET DLL (.NET FX 4.0)。

我尝试按照http://msdn.microsoft.com/en-us/library/ms973915.aspx 的示例进行操作,但没有成功。我下载(文章中的链接)源并编译,没有成功(错误消息:运行时错误'-2146234341(8013101b)':自动化错误“)。使用注册的VB.NET DLL从VB6 IDE运行。

我尝试了其他示例,其中 .NET DLL 创建为 COM 类(使用 VS2010 中的“COM 类”模板),是否嵌入了引用 DLL 的清单,但对我没有任何作用。

有人可以提供一些简单的源代码,其中包含 VB6 客户端在 reg-free 场景中使用的 VB.NET DLL (.NET FX v4) 的清单示例吗?

非常感谢。

【问题讨论】:

    标签: vb.net .net-4.0 vb6 regfreecom


    【解决方案1】:

    运行时错误“-2146234341 (8013101b)”:自动化错误

    您的问题与清单无关,您需要先解决这个问题。错误代码是 COR_E_NEWER_RUNTIME。换句话说,您的 [ComVisible] 类无法加载,因为它依赖于 CLR 版本 4。而且程序很可能已经加载了 CLR 版本 2,因为首先询问了另一个 [ComVisible] 类。它要求第 2 版。

    您需要一个 app.exe.config 文件来强制加载 CLR 版本 4,即使有人要求提供版本 2。它应该如下所示:

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

    将其命名为与 vb6 exe 相同的名称(如“foo.exe.config”以匹配“foo.exe”)并将其放在与 .exe 相同的目录中。如果您想使用 VB6 IDE 来调试使用此库的 vb6 代码,那么您还需要 c:\program files\microsoft visual studio\vb98 中的 vb6.exe.config

    【讨论】:

    • 这是我的问题,我欠你一杯啤酒。为了将来参考,我在哪里查找这些 COM 自动化错误号,例如知道 -2146234341 表示 COR_E_NEWER_RUNTIME
    • 您必须了解 Windows SDK 才能查找这些数字。这个来自 CorError.h。谷歌了解他们。还是这样。
    猜你喜欢
    • 2016-08-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多