Visual Studio, Flash & ActiveX рассол - PullRequest
0 голосов
/ 23 июля 2010

Около пяти лет назад я написал приложение для киоска с сенсорным экраном в Visual Studio 2005 (.net 2.0) со встроенным фильмом Flash ActiveX, в котором было запущено приложение Flash, написанное на Flash 6.

Перенесемся обратно в настоящее, и мне было поручено обновить нашу киоск-платформу, чтобы обеспечить возможность проведения видеоконференций. Для этого необходимо установить связь с внешним приложением через Window Messages, которое обрабатывает видеовызов и показывает входящее видео как наложенное изображение.

Однако я столкнулся с несколькими (казалось бы, противоречивыми) проблемами, заставив старый проект Visual Studio 2005 работать на моем компьютере сегодня под Windows 7 и Visual Studio 2010.

Попытка 1: Windows 7, Visual Studio 2010, Flash 10.1 ActiveX установлены
Для начала я проверил старое решение из SVN и загрузил его в Visual Studio 2010, используя мастер обновления. Однако, когда я запускаю проект, я получаю следующее исключение:

System.Runtime.InteropServices.COMException was unhandled
  Message=Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  Source=System.Windows.Forms
  ErrorCode=-2147221164
  StackTrace:
       at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
       at System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
       at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
       at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
       at System.Windows.Forms.AxHost.CreateInstance()
       at System.Windows.Forms.AxHost.GetOcxCreate()
       at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
       at System.Windows.Forms.AxHost.CreateHandle()
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.AxHost.EndInit()
       at KioskV2_Client.Form1.InitializeComponent() in C:\Users\7877.INTERNET\Desktop\KioskV2_Client_WithSkype\KioskV2_Client\Form1.Designer.cs:line 189
       at KioskV2_Client.Form1..ctor() in C:\Users\7877.INTERNET\Desktop\KioskV2_Client_WithSkype\KioskV2_Client\Form1.cs:line 88
       at KioskV2_Client.Program.Main() in C:\Users\7877.INTERNET\Desktop\KioskV2_Client_WithSkype\KioskV2_Client\Program.cs:line 17
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

в следующей строке кода в Form1.Designer.cs ::

((System.ComponentModel.ISupportInitialize)(this.axShockwaveFlash1)).EndInit();

Звучит так, будто Flash не зарегистрирован как компонент Active X, поэтому я:

  • Переустановлен Flash 10.1
  • Вручную запустил regsvr32

Однако после этого проблема осталась

Попытка 2: запуск нового проекта, Windows 7, Visual Studio 2010 (target .net 2.0)
На этот раз я создал новый проект в VS2010, добавил ссылку на Flash, добавил его в панель инструментов и поместил ссылку на форму.

После нажатия F5 меня приветствует запущенная WinForm с счастливо встроенным Flash.

Так что мой обновленный проект говорит, что Flash не зарегистрирован - однако мой новый проект работает довольно счастливо!

Вопрос : Почему не запускается моя первая попытка? Я удалил Flash из проекта и заново добавил его, но с той же ошибкой.

1 Ответ

0 голосов
/ 15 августа 2011

В данном случае проблема заключалась в том, что tyranid предложил:

Просто мысль, работает ли на Windows 7 в версии x64?Если это так, возможно, вы только что попали в конвертированный проект, создающий универсальную сборку .NET, и, поскольку в настоящее время нет версии для x64, он не найдет ее.- tyranid

Запуск нового проекта в 64-битной версии, а затем копирование кода из старого 32-битного проекта решило проблему.

...