我需要在這裏讀一些思想,因爲我正在嘗試做我不完全理解的內容。在Vista 64位上使用來自C#或VBS的32位COM對象並獲取錯誤80004005
有一個32位應用程序(稱爲CQG的電子交易應用程序),它提供了一個用於外部訪問的COM API。我有從Excel,.NET(C++,VB和C#)和shell VBScript訪問此API的示例程序和腳本。我有這些.NET應用程序作爲源代碼和編譯的可執行文件(32位,在Windows XP上編譯)。
現在我有Windows Vista Home 64位,這讓我的腦子旋轉。 Excel示例工作得很好(在Excel 2003中)。編譯的.NET示例可執行文件也可以工作。
但是當我試圖運行.NET C#示例轉換爲Visual Studio C#Expression並編譯時,或者運行VBScript腳本時,嘗試創建對象時出現錯誤80004005。最初.NET應用程序也給了我80040154,但後來我想如何使它產生32位代碼而不是64位,所以現在C#和VBScript應用程序中的錯誤是相同的。這就是我現在所取得的所有進展。
是的,我嘗試從我的VBS上的SysWOW64文件夾運行32位版本的cscript.exe/WScript,但結果仍然是相同的(80004005)。
如何解決這個問題?我幾乎準備好相信這實際上是不可能的,但事實上,Excel VBA的工作原理和在Windows XP上編譯的.NET可執行文件運行得很好,這隻會讓我生氣。應該有辦法打敗這個東西(可能只有Windows Vista開發人員都知道的一些祕密)!我會感謝任何幫助!
PS:我相信代碼樣本沒有多大意義在這裏,但這個是VBScript中的線,失敗:
Set CEL = WScript.CreateObject("CQG.CQGCEL.4.0", "CEL_")
這是C#:
CQGCEL CEL = new CQGCEL();
更新:忘了當然,說UAC已關閉。我正在從管理員權限開始工作。
我也試着看使用Process Monitor讀取哪些註冊表鍵,但對於這個對象的GUID,一切看起來都不錯。我無法識別其他一些GUID,所以我不確定他們是否批評。
這個COM對象有沒有可能使用Internet Explorer並得到錯誤的(如Internet Explorer 7而不是Internet Explorer 6引擎或其他東西)?
你有沒有想過這個? – 2009-03-26 16:43:20