Около пяти лет назад я написал приложение для киоска с сенсорным экраном в 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 из проекта и заново добавил его, но с той же ошибкой.