在 Windows 7 上使用 VB6 注册 Free Com [英] Reg Free Com with VB6 on Windows 7

查看:21
本文介绍了在 Windows 7 上使用 VB6 注册 Free Com的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些从 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"?><程序集 xmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><程序集标识类型=win32"名称=客户"版本=1.1.0.0"/><依赖性><依赖程序集><程序集标识类型="win32"name="一些.Assembly.A"版本="1.1.0.0"/></dependentAssembly></依赖><依赖性><依赖程序集><程序集标识类型="win32"name="一些.Assembly.B"版本="1.1.0.0"/></dependentAssembly></依赖></组装>

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

<?xml version="1.0" encoding="UTF-8" Standalone="yes"?><程序集 xmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><程序集标识类型="win32"name="一些.Assembly.A"版本="1.1.0.0"/><clr类clsid="{F1234567-1234-1234-1234-123456789012}"progid="Some.Assembly.A.Class1"threadingModel="两者"name="Some.Assembly.A.Class1" ></clrClass><文件名=Some.Assembly.A.dll"/></组装>

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

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

<块引用>

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

在 XP 上,它成功了.如果我故意拼错 VB6.EXE.manifest 中的依赖程序集 - 在 XP 上我会得到 <块引用>

"此应用程序启动失败因为应用程序配置是不正确的.重新安装应用程序可能会解决此问题."

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

解决方案

你试过简单安装 &在WinXP兼容模式下运行VB6?

I have some .NET code I use from VB6 code. I have always developed this on an XP machine by creating a VB6.exe.manifest file that listed the dependent .NET assemblies.

For example, say my 2 .NET assemblies are Some.Assembly.A.dll and Some.Assembly.B.dll, here is what VB6.EXE.manifest looks like (I use version=1.1.0.0 below because that is the version I set on the .NET AssemblyVersion in AssemblyInfo.cs):

<?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>

Then, along with the DLLs in the same directory, I have the assemblies and their own manifest files. Here is an example "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>

I also run tlbexp on referenced DLLs to create TLB files, and this is what I reference in my VB6 project file.

I want to move to a Windows 7 64 BIT machine. Using the same methods, when I hit the VB6 code that instantiates the .NET object on the WIN7 machine I get

"ActiveX Component Can't Create Object."

On XP, it succeeds. If I purposely misspell the Dependent assembly in VB6.EXE.manifest - on XP I get

"This application has failed to start because teh application configuration is incorrect. Reinstalling the application may fix this problem."

On WIN7, VB6 just loads. It's like it ignores the manifest on WIN7, so I can't load my .NET object using REG FREE methods on WIN7. If I regasm the DLL, everything works.
Any ideas on how to make VB6 work with reg free com on WIN7 (64 BIT)?

解决方案

Have you tried simply installing & running VB6 in WinXP compatability mode?

这篇关于在 Windows 7 上使用 VB6 注册 Free Com的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆