【问题标题】:Out of Memory error when using vb6 InteropUsercontrol with .Net Framework 4将 vb6 InteropUsercontrol 与 .Net Framework 4 一起使用时出现内存不足错误
【发布时间】:2011-07-13 19:59:45
【问题描述】:

我一直在使用 vb6 互操作工具包来允许我在旧版 vb6 应用程序中使用 vb.Net 用户控件。我想开始使用 .Net 4 中的一些功能,但是当我将 .Net usercontrol 项目上的目标框架从“.Net Framework 2”更改为“.Net Framework 4”时,它构建正常,并且在我的开发中运行正常框,但是当我将应用程序部署到测试盒时,应用程序在启动时失败,并出现“内存不足”错误。

这里有一些关于我如何进行实验的更多细节......

使用安装了 Interop 2.1 Toolkit 的 VS 2010,我创建了一个“VB6 Interop Usercontrol”项目。我向默认的 InteropUsercontrol.vb 类添加了一个按钮(这样控件将在主机应用程序中可见)。我构建了dll。我创建了一个 vb6 项目 (Project1) 并从 vb6 项目/组件/控件对话框中引用“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。

无论我做什么,我都无法让用 .net 4.0 编写的用户控件在 vb6 应用程序中运行。任何建议将不胜感激。

乔尔

【问题讨论】:

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


    【解决方案1】:

    我偶然发现了同样的问题并找到了解决方案。

    如果 .Net 4.0 是用户控件的目标,则必须修改互操作用户控件的清单以使部署工作。 你必须添加 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>
    

    【讨论】:

      【解决方案2】:

      我不知道这可以帮助...

      我们在使用 VB.Net 用户控件的 VB6 项目中遇到“内存不足”错误。它确实发生在 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 2017-01-27
        • 1970-01-01
        • 2015-02-17
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多