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工作的任何想法?