11

我正在尝试在无注册的情况下从 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 客户端的 VB.NET DLL (.NET FX v4) 的清单示例吗?

提前非常感谢。

4

1 回答 1

21

运行时错误“-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

于 2012-07-13T15:12:25.190 回答