2011-05-25 64 views
4

我們有一個用Delphi6 websnap編寫的當前產品,我試圖升級到delphi 2005下運行。 它使用ADO,並且運行錯誤是「CoInitialize has不被稱爲「。 我可以找到這個錯誤的唯一引用指向IntraWeb和一些名爲ServerController,我不知道與我有關。 CoInitialize(nil)的任何數量的調用都不起作用。升級websnap應用到delphi 2005 - CoInitialize錯誤

我是在浪費時間讓它運行還是有可能在2005年下運行 - 或者是後來發佈的版本呢?

回答

5

CoInitialize需要在執行COM訪問的線程中(例如,在通過ADO訪問數據庫的任何線程中)調用。它在默認情況下由Delphi在主線程中調用,但您需要在其他線程中顯式調用它。

嘗試在OnActivate事件中調用它,並在OnDeactivate事件中調用CoUninitialize

還要確保您的ADOTables和ADOConnections在設計時未打開。否則,應用程序會嘗試使用COM,然後調用CoInitialize

如果一切都失敗 - 請嘗試覆蓋Web窗體的構造函數,並在調用繼承之前在其中輸入CoInitialize。不要忘記在析構函數中調用CoUninitialize

+0

感謝您的回覆,但我不確定什麼構成websnap中的線程。我在各種激活事件中嘗試過CoInitialize,但執行似乎無法達到它們。也嘗試了初始化部分,它運行但沒有幫助。 – Petebr 2011-05-25 12:28:19

+0

對Steve的回答爲+1,但你可以創建一個簡單的COM初始化單元,並將其作爲項目源使用子句中的第一個單元。將CoInitialize放入初始化部分,並將CoUninitialize放入最終化部分。 – Stuart 2011-05-25 13:13:20

+0

謝謝Stuart,但我已經有效地嘗試過了。我可以逐步調用運行應用程序的CoInit代碼。當我第一次打網頁時,它給了我錯誤。即使我使用F7,我也沒有看到我自己的代碼。所以我認爲問題是 - WebSnap可以與delphi 2005和ADO一起工作嗎? – Petebr 2011-05-25 14:22:51