Ошибка нехватки памяти при использовании vb6 InteropUsercontrol с .Net Framework 4 - PullRequest
0 голосов
/ 12 марта 2011

Я использую vb6 Interop Toolkit, чтобы позволить мне использовать пользовательский контроль vb.Net в устаревшем приложении vb6.Я хочу начать использовать некоторые функции в .Net 4, но когда я изменяю целевую платформу в проекте .Net usercontrol с .Net Framework 2 на .Net Framework 4, она работает нормально и работает нормально в моей разработке.но при развертывании приложения в тестовом окне приложение запускается при запуске с ошибкой «Недостаточно памяти».

Вот еще несколько деталей о том, как я экспериментирую ...

Используя VS 2010 с установленным инструментарием Interop 2.1, я создаю проект "VB6 Interop Usercontrol".Я добавляю кнопку в класс InteropUsercontrol.vb по умолчанию (именно так элемент управления будет виден в главном приложении).Я строю DLL.Я создаю проект vb6 (Project1) и ссылаюсь на компонент «InteropUsercontrolLibrary1» из диалогового окна vb6 Projects / Components / Controls.Я добавляю элемент управления в форму и компилирую Project1.exe.Затем я развертываю Project1.exe, InteropUsercontrolLibrary1.dll и Project1.exe.manifest (см. Ниже) для тестирования машин (XP и Windows7), на которых установлена ​​Framework 4.0.Приложение работает только с этими тремя файлами.Если я повторяю тот же процесс, но изменяю целевую среду на 4.0, я получаю ошибку «Недостаточно памяти».

Вот мой манифест приложения:

<?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 тоже.

Независимо от того, что я делаю, я не могу заставить usercontrol, написанный на .net 4.0, запускаться в приложении vb6.Любые предложения будут оценены.

Джоэл

Ответы [ 2 ]

1 голос
/ 09 июля 2012

Я наткнулся на ту же проблему и нашел решение.

Манифест Interop Usercontrol должен быть модифицирован, чтобы заставить развертывание работать, если .Net 4.0 является целью 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>
0 голосов
/ 18 мая 2011

Я не знаю, это может помочь ...

У нас была ошибка "Недостаточно памяти" в проекте VB6 с пользовательскими элементами управления VB.Net.Это случилось в сборнике VB6.После многих часов поиска это было из-за того, что свойство view было обнародовано и должно было стать другом, поскольку 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
...