在.Net Framework 4中使用vb6 InteropUsercontrol时出现内存不足错误

时间:2011-03-11 22:16:36

标签: visual-studio-2010 vb6 com-interop

我一直在使用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中编写的用户控件。任何建议将不胜感激。

乔尔

2 个答案:

答案 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