大約五年前,我在Visual Studio 2005(.net 2.0)中編寫了一個帶有嵌入式Flash ActiveX影片的觸摸屏應用程序,該應用程序運行了一個用Flash 6編寫的Flash應用程序。Visual Studio,Flash和ActiveX pickle
快速回到現在,我的任務是升級我們的信息亭平臺,以便進行視頻會議。這需要通過處理視頻呼叫的窗口消息與外部應用程序進行通信,並將傳入的視頻顯示爲疊加圖像。
但是我碰到幾個(看似衝突)問題越來越老的Visual Studio 2005項目到今天我的電腦上運行時,Windows 7和Visual Studio 2010下
嘗試1:Windows 7中,視覺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();
這聽起來像閃存未註冊作爲一個Active X組件,所以我:
- 重新安裝了Flash 10.1
- 手動跑REGSVR32
這樣做之後,但是問題依然
嘗試2:啓動一個新的項目,Windows 7中,Visual Studio 2010中(目標.NET 2.0)
這一次,我創建了一個新的項目在VS2010中,添加了對Flash的引用,將其添加到工具箱並在表單上放置了一個引用。
打到後F5我迎着一個運行的WinForm,Flash愉快地嵌入。
所以我升級的項目說Flash沒有註冊 - 但是我的新項目運行的很開心!
問題:爲什麼我第一次嘗試運行?我已經從項目中刪除了Flash並重新添加了它,但是發生了同樣的失敗。
只是一個想法,是運行x64版本的Windows 7盒?如果是這樣的話,你可能剛剛被轉換後的項目創建了一個通用的.NET程序集,並且因爲目前沒有x64版本的閃存,它不會找到它。 – tyranid 2010-07-26 22:28:29
是的 - 機器運行x64,良好的通話。也許這整個混亂都歸結於不同的位世界。 – 2010-08-02 14:14:37