Вопрос

У меня есть код .NET, который я использую из кода VB6. Я всегда разрабатывал это на машине XP, создав файл vb6.exe.manifest, в котором перечислены зависимые сборки .net.

Например, скажем, мои 2 .NET Assemblies есть некоторые. Assembly.a.dll и некоторые. Я установил на .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>

Я тоже бегаю tlbexp При ссылках на DLL для создания файлов TLB, и это то, что я ссылаюсь в своем файле проекта VB6.

Я хочу перейти на 64 -битную машину Windows 7. Используя те же методы, когда я попадаю в код VB6, который экстремирует объект .NET на машине Win7, который я получаю

«Компонент ActiveX не может создать объект».

На XP это удается. Если я намеренно усвою зависимую сборку в vb6.exe.manifest - на XP я получаю

«Это приложение не смогло запустить, потому что конфигурация приложения TEH неверна. Установка приложения может решить эту проблему».

На Win7 VB6 просто загружается. Как будто он игнорирует манифест на Win7, поэтому я не могу загрузить свой объект .NET, используя бесплатные методы REG на Win7. Если я regasm DLL, все работает.
Есть идеи о том, как заставить VB6 работать с Reg Free Com на Win7 (64 бит)?

Это было полезно?

Решение

Вы пробовали просто установить и запустить VB6 в режиме совместимости WinXP?

Другие советы

Если вы перекомпиляете vb6.exe или иным образом обрабатываете его для машины Win7, вы должны знать, что некоторые из новых инструментов разработки автоматически внедряют манифест, чтобы вы могли проверить это (быстрый способ - открыть исполняемый файл в VS и ищите ресурс RT_Manifest с идентификатором 1). Если есть встроенный манифест, внешние манифесты игнорируются, что, возможно, почему, когда вы редактируете внешние самые мрачные, ничего не происходит, и его содержимое игнорируется.

Помимо того, что Эрно сказал о SXStrace (не могли бы вы опубликовать результаты, которые вы получили от SXStrace?), Обязательно обновите TimeStamp vb6.exe, если манифест встроен в него, или vb6.exe.manifest иначе. Vista + Win7 Cache Содержимое манифестов, вышло из временной метки корневого манифеста, чтобы ваши местные изменения не могли быть забраны. Если SXStrace дает вам пустые результаты, обновите временные метки и попробуйте еще раз.

Первое, что приходит на ум, это то, что стоит попытаться подписать код .NET. Может случиться так, что на 64 -битный Win7 -бит применяется неявный уровень безопасности, который требует подписанных ссылок на сборку.

Кроме того, вы можете попытаться сузить проблему (в любом конкретном порядке)

  • Обивайте программу для работы в качестве администратора и повторно.
  • Запретить программу для запуска в «Modebilitty Mode XP/Win2K»
  • запустить это Зависимость (У него есть возможность моделировать загрузку программы и зарегистрировать ошибки)

Удачи!

Я делал эту гибридную отладку на днях и получил ошибку: «Компонент ActiveX не может создать объект». «Я предлагаю вам следить за этой статьей Отладка гибридной Visual Basic 6.0/Visual Basic .NET .NET Приложения .NET И убедитесь, что пример голой кости работает на вашем ПК Win7 (я повторно работает с Regasm). Затем с помощью Reg бесплатно я исследовал следующие ссылки: .NET Object от VB6 без использования regasm.exe? и тут Без регистрация активация компонентов .NET на основе .NET: прохождение

Вы можете попытаться использовать /win32 вариант tlbexp на x64 ОС.

Из этот пост в блоге

Вы можете использовать SXStrace, чтобы помочь отладить проблему. Чтобы запустить трассировку «SXStrace Trace -logfile: sxstrace.etl», чтобы преобразовать файл журнала в то, что вы можете просмотреть «Sxstrace parse -logfile: sxstrace.etl -outfile: sxstrace.txt».

Вы пробовали это?

Еще одно дело, что на Vista/Windows 7 вы можете легко столкнуться с UAC, вы это проверили?

Я смог успешно использовать классы .NET от VB6 в Win 7-64, используя манифесты, созданные Бок рядом с манифестом. Анкет У этого есть бесплатная пробная версия.

Не забудьте включить версию выполнения .NET, на которую нацелены ваши классы. Это может быть вашей проблемой с начала с Win 7 поставляется только с профилем клиента .NET 4, предварительно установленным.

Regasm делает гораздо больше, чем просто генерирует TLB или необходимые ключи реестра.

Например, он может генерировать композиционные интерфейсы, основанные на коммерных видиных типах. Regasm сделает это, когда Visible Type не реализует, например, интерфейс.

Есть ли у вас какие -либо видимые типы, которые не реализуют интерфейс (или не определяют интерфейс COM с помощью ComdefaultInterfaceatTribute)?

Если это так, это может быть вашей проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top