我有一些从VB6代码中使用的.NET代码。我总是在XP机器上通过创建一个列出相关.NET程序集的VB6.exe.manifest文件来开发它。
例如,假设我的两个.NET程序集是Some.Assembly.A.dll和Some.Assembly.B.dll,下面是VB6.EXE.manifest的样子(我使用下面的version=1.1.0.0,因为这是我在.NET AssemblyVersion中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>
然后,除了同一目录中的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>
我还在引用的DLL上运行tlbexp
来创建TLB文件,这就是我在VB6项目文件中引用的内容。
我想转到Windows7 64位计算机。使用相同的方法,当我点击在WIN7机器上实例化.NET对象的VB6代码时,我得到
"ActiveX组件无法创建对象。“
在XP上,它成功了。如果我故意拼写VB6.EXE.manifest中的依赖程序集-在XP上我会得到
“此应用程序无法启动,因为应用程序配置不正确。重新安装此应用程序可能会解决此问题。”
在WIN7上,VB6只是加载。就像它忽略了WIN7上的清单一样,所以我不能在WIN7上使用REG FREE方法加载我的.NET对象。如果我regasm
动态链接库,一切都会正常工作。
关于如何在WIN7 (64位)上使VB6与reg free com一起工作有什么想法吗?
发布于 2011-02-25 00:16:10
您是否尝试过在WinXP兼容模式下简单地安装和运行VB6?
发布于 2011-01-10 17:35:33
如果您正在为win7机器重新编译vb6.exe或以其他方式处理它,您应该知道一些较新的开发工具会自动嵌入清单,因此您可能想要检查一下(一种快速的方法是在VS中打开可执行文件,并查找id为1的资源RT_MANIFEST )。如果有嵌入的清单,外部清单将被忽略,这可能就是为什么当您编辑外部manfiest时,什么都不会发生,其内容也会被忽略。
除了Erno所说的sxstrace (您能发布从sxstrace获得的结果吗?),如果清单嵌入其中,请确保更新VB6.exe的时间戳,否则更新VB6.exe.manifest。Vista + Win7缓存清单的内容,关闭根清单的时间戳,因此您的本地编辑可能不会被拾取。如果sxstrace给出空白结果,请更新时间戳,然后重试。
发布于 2011-01-28 05:48:44
首先浮现在脑海中的是值得尝试对.net代码进行签名。可能隐式地在需要签名程序集引用的win7 64位上应用了某种更高级别的安全性。
此外,您可以尝试通过以下方式来缩小问题的范围(没有特定的顺序)
祝好运!
https://stackoverflow.com/questions/4565000
复制相似问题