2010-07-23 65 views
0

大約五年前,我在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並重新添加了它,但是發生了同樣的失敗。

+0

只是一個想法,是運行x64版本的Windows 7盒?如果是這樣的話,你可能剛剛被轉換後的項目創建了一個通用的.NET程序集,並且因爲目前沒有x64版本的閃存,它不會找到它。 – tyranid 2010-07-26 22:28:29

+0

是的 - 機器運行x64,良好的通話。也許這整個混亂都歸結於不同的位世界。 – 2010-08-02 14:14:37

回答

0

在這種情況下,這個問題是因爲蟲族建議:

只是一個想法,就是Windows 7的機器上運行在x64版本?如果是這樣,你 可能剛剛被轉換後的項目創建一個通用的.NET程序集,並且因爲目前沒有x64版本的閃存它找不到它。 - tyranid

以64bit格式開始新項目,然後從舊的32bit項目複製代碼解決了這個問題。