none
VS2005使用COM元件在Windows7上的疑問 RRS feed

  • 問題

  • 安各位好,再此請教一個問題
    開發環境 :VS2005 ,系統XPSP2,使用COM元件屬於第三方的元件 關於影像檔案顯示的元件
    測試環境:Windows7 專業版 UAC 已關閉
    問題:
    開發出來的程式在 xp 系統將影像載入元件做顯示是正常運作的,但在windows7 會出現錯誤訊息

    System.AccessViolationException: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。
    於 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    於 System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
    於 System.Windows.Forms.Control.DefWndProc(Message& m)
    於 System.Windows.Forms.Control.WndProc(Message& m)
    於 System.Windows.Forms.AxHost.WndProc(Message& m)
    於 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    於 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    於 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    是否有可能錯誤的方向,PS:利用 try catch 無法抓出其錯誤。

    而當今天我利用VB6 引用COM元件,製成 *.exe 檔,放在 Windows7 上跑時卻是正常可以顯示。

    也嘗試在 Windows 7 上裝 VS2005 進行開發,其結果是在VS2005內 DeBug 模式下可以正常運作,但編譯成執行檔直接執行,一樣會出現錯誤。
    不知是否各位前輩有碰過類似的經驗。
    2010年4月23日 上午 04:32

解答

  • 1. 請確認該 COM 元件沒有其他的 dependencies。
    2. Inteop.XXXXXX.dll 是 .NET Framework 橋接 COM 元件時的 Interoperability Library,如果沒有它的話 .NET Framework 程式會無法存取 COM 元件。
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    • 已標示為解答 kevin 維 2010年4月30日 上午 01:51
    2010年4月23日 上午 09:48
    版主
  • 把那個程式加到 Win7 DEP 的例外清單試看看
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 kevin 維 2010年4月30日 上午 01:51
    2010年4月23日 下午 12:43

所有回覆

  • 你在win7 執行程式必需先在那個.exe檔先按滑鼠右鍵 以系統管理員登入 在執行才不會有問題

    2010年4月23日 上午 06:09
  • x32 你好,您說的方法也提醒了我,經過測試結果還是相同,

    還是在將影像檔案指定給COM元件時作顯示時,出現相同的錯誤,也再利用相容性去跑跑看但還是一樣。

    PS:請問一下 VS2005 引用COM元件,編譯後會產生,在路徑下 bin\Release\ 有 Interop.XXXXX.dll 的檔案 ,

    為何會產生 Interop.XXXXXX.dll ,對程式在執行時有何影響。

     

    2010年4月23日 上午 06:56
  • 1. 請確認該 COM 元件沒有其他的 dependencies。
    2. Inteop.XXXXXX.dll 是 .NET Framework 橋接 COM 元件時的 Interoperability Library,如果沒有它的話 .NET Framework 程式會無法存取 COM 元件。
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    • 已標示為解答 kevin 維 2010年4月30日 上午 01:51
    2010年4月23日 上午 09:48
    版主
  • 把那個程式加到 Win7 DEP 的例外清單試看看
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 kevin 維 2010年4月30日 上午 01:51
    2010年4月23日 下午 12:43
  • 感謝心冷大的回覆 :

    依照你的建議,在 Window 7 發現一個問題,當我設定 DEP(資料防止執行) 的例外清單時,跳出訊息

    [ 此程式必須在 DEP 模式下執行。無法關閉此程式的 DEP 模式。 ] ,為何會跳出此訊息是否有可能的原因 ?

    也 Google 了一下 ,發現 DEP(資料防止執行) 模式 有些是硬體支援 ,如無硬體支援 Windows 平台的作業系統 才會開啟

    軟體模式的 DEP(資料防止執行) .

    而剛好 在測試 Windows 7 那台電腦有硬體支援,目前正在考慮在別台電腦安裝 測試中。

    PS: 不知是否有人能提供一下 ,如何關閉 硬體支援的 DEP(資料防止執行),或是相關資訊

    也感謝小朱大的解釋

    謝謝 !

    2010年4月26日 上午 03:30
  • 可以關閉硬體的 DEP ,這篇有寫到:

    http://tlcheng.spaces.live.com/Blog/cns!145419920BFD55A7!4522.entry

     

    但是這個設定跟主機版有關,你需要看你主機板的手冊或聯絡主機板的客服。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月26日 下午 02:18