在Windows 7上使用VB6注册Free Com

use*_*757 16 .net c# vb6 interop regfreecom

我有一些从VB6代码中使用的.NET代码.我一直在XP机器上通过创建一个列出依赖.NET程序集的VB6.exe.manifest文件来开发它.

例如,假设我的2个.NET程序集是Some.Assembly.A.dll和Some.Assembly.B.dll,这里是VB6.EXE.manifest的样子(我使用的是version = 1.1.0.0,因为那是版本我在AssemblyInfo.cs中设置了.NET AssemblyVersion:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
  <assemblyIdentity
              type = "win32"
              name = "client"
              version = "1.1.0.0" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
                  type="win32"
                  name="Some.Assembly.A"
                  version="1.1.0.0" />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
                  type="win32"
                  name="Some.Assembly.B"
                  version="1.1.0.0" />
    </dependentAssembly>
  </dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)

然后,与同一目录中的DLL一起,我有程序集和它们自己的清单文件.这是一个示例"Some.Assembly.A.dll.manifest":

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">
  <assemblyIdentity
      type="win32"
      name="Some.Assembly.A"
      version="1.1.0.0" />
  <clrClass
      clsid="{F1234567-1234-1234-1234-123456789012}"
      progid="Some.Assembly.A.Class1"
      threadingModel="Both"
      name="Some.Assembly.A.Class1" >
  </clrClass>
  <file name = "Some.Assembly.A.dll" />
</assembly>
Run Code Online (Sandbox Code Playgroud)

我还运行tlbexp引用的DLL来创建TLB文件,这是我在VB6项目文件中引用的内容.

我想转移到Windows 7 64 BIT机器.使用相同的方法,当我点击在WIN7机器上实例化.NET对象的VB6代码时,我得到了

"ActiveX组件无法创建对象."

在XP上,它成功了.如果我故意拼错VB6.EXE.manifest中的Dependent组件 - 在XP上我得到了

"此应用程序无法启动,因为应用程序配置不正确.重新安装应用程序可能会解决此问题."

在WIN7上,VB6只是加载.这就像它忽略了WIN7上的清单,所以我无法在WIN7上使用REG FREE方法加载我的.NET对象.如果我regasm是DLL,一切正常.
关于如何在WIN7(64位)上使用reg free com使VB6工作的任何想法?

小智 1

您是否尝试过在 WinXP 兼容模式下简单地安装和运行 VB6?