我一直在使用vb6 Interop Toolkit来允许我在旧版vb6应用程序中使用vb.Net用户控件。我想开始使用.Net 4中的一些功能,但是当我将.Net用户控制项目中的目标框架从“.Net Framework 2”更改为“.Net Framework 4”时,它构建正常,并且在我的开发上运行正常框,但是当我将应用程序部署到测试框时,应用程序在启动时因“内存不足”错误而失败。
以下是我正在试验的更多细节......
在安装了Interop 2.1 Toolkit的情况下使用VS 2010,我创建了一个“VB6 Interop Usercontrol”项目。我在默认的InteropUsercontrol.vb类中添加了一个按钮(这样控件将在主机应用程序中可见)。我建立了DLL。我创建了一个vb6项目(Project1)并从vb6 Projects / Components / Controls对话框中引用了“InteropUsercontrolLibrary1”组件。我将控件添加到窗体并编译Project1.exe。然后,我将Project1.exe,InteropUsercontrolLibrary1.dll和Project1.exe.manifest(见下文)部署到测试已安装Framework 4.0的计算机(XP和Windows7)。只有这三个文件,应用程序运行正常。如果我重复相同的过程但将目标框架更改为4.0,则会出现Out of Memory错误。
这是我的申请清单:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="Test"
version="1.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="InteropUserControlLibrary1"
version="1.0.0.0"
/>
</dependentAssembly>
</dependency>
</assembly>
组件清单由Interop Toolkit预构建事件自动构建并嵌入到dll中。它适用于2.0,所以我希望它也适用于4.0。
无论我做什么,我都无法在vb6应用程序中运行.net 4.0中编写的用户控件。任何建议将不胜感激。
乔尔
答案 0 :(得分:1)
我偶然发现了同样的问题并找到了解决方案。
如果.Net 4.0是usercontrol的目标,则必须修改Interop Usercontrol的清单以使部署工作。 你必须添加 runtimeVersion = “v4.0.30319” 到clrClass部分。
Interop UserControl清单应如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="InteropUserControlLibrary1"
version="1.0.0.0" />
<clrClass
clsid="{f40e88ed-235a-4c9d-93a7-641ca0002635}"
progid="InteropUserControlLibrary1.InteropUserControl"
threadingModel="Both"
name="InteropUserControlLibrary1.InteropUserControl"
runtimeVersion="v4.0.30319" >
</clrClass>
</assembly>
答案 1 :(得分:0)
我不知道这可以帮助......
我们在使用VB.Net用户控件的VB6项目中出现“Out of Memory”错误。它确实发生在VB6编译中。经过几个小时的搜索,这是因为视觉属性被公之于众,应该是朋友,因为VB6没有使用它,所以一定不能看到它。例如:
<ComVisibleAttribute(False)> _
Friend Property GroupValue() As String Implements IView.GroupValue
Get
Return Me.mPresenter.GroupValue
End Get
Set(ByVal value As String)
Me.mPresenter.GroupValue = value
End Set
End Property