ActiveX OCX註冊時報內存位置訪問無效的一個解決方法

   以前解決過WIN7下ActiveX註冊的問題,積累下來的方法,一是因爲WIN7下命令行的的執行權限非管理員身份,利用管理員身份啓動程序或者命令行就可以完成註冊;二是因爲ActiveX註冊所依賴的動態庫不能夠被找到,不能被註冊。關於動態庫不能夠被找到,可以使用VC自帶的View Dependency的工具可以查看,帶黃色圖標的庫就是找不到的。

  但是這周遇到的問題,先是VC6的ActiveX工程轉移到VS2010下編譯,耗費一番,雖然編譯可以通過,但是Debug時無法註冊OCX,報“error MSB8011: 未能註冊輸出。請嘗試啓用“逐用戶重定向”,或者使用提升的權限從命令提示符處註冊該組件。”,在管理員身份下使用命令行工具regsvr32來註冊,依然報“內存位置訪問無效”。

  由於問題提示信息明確,就在網上搜羅了半天,也沒有一個說的正對到點子上來,變得很是苦悶,很快就要交付了。在測試和思考後,通過建立一個輕量級的ActiveX OCX,逐步添加所改造工程的一些外部依賴庫,才最終排查出來。原因是因爲某個庫,可能的兼容性問題。這個庫在vs2010下重新編譯下生成新的.lib和.dll,然後重新編譯整個工程,就可以正常地註冊控件了。這個事情耗費了很長時間,也讓痛苦了一段時間,所以希望這篇文章的總結,可以幫助大家節省時間:)

   在分析定位問題的方法上,還是利用對比,從差異上尋找解決途徑!

   這一段利用VC開發環境開發多工程的比較多,以前VC間多工程的文件依賴,可以靠pre build step或pre link step,甚至一些post build step和post lin step進行類似關聯處理。在研究一個開源軟件時,發現它是通過將不同工程的輸出目錄都界定到同一個目錄下,來避免這樣的文件複製和拷貝操作,因爲每次編譯鏈接都在輸出目錄和一些搜索路徑下進行,輸出到同一個目錄,自然就可以讓編譯過程玩的更順暢了。特別是只有一個主工程,其他工程都需要輸出庫,讓主工程用,就特別適合!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章