首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 專案引用 COM 元件導致 LoaderLock 與 Protection Error 解決:直接引用類型庫

     編輯:程式設計疑難解答

問題現象

專案需使用 NCT 音訊控件,手動引用 AxInterop.NCTAUDIOEDITOR2Lib.dll 與 Interop.NCTAUDIOEDITOR2Lib.dll 後出現:

  1. 「嵌入互操作類型」警告 → 設為 False 後出現 LoaderLock MDA:「正嘗試在 OS 載入器鎖內執行託管代碼」。
  2. 關閉 LoaderLock 後彈出 Protection Error:「Debugger detected - please close it down」,無法調試。

根本原因

手動引用已產生的 Interop 組件,且該 COM 元件可能內建反調試保護或簽名驗證。Visual Studio 產生的 Interop 組件與手動複製的版本、簽名不一致,觸發保護機制。

正確做法:直接引用 COM 類型庫

  1. 專案右鍵 → Add Reference → COM 標籤。
  2. 搜尋 NCTAUDIOEDITOR2(或類型庫名稱),勾選確定。
  3. VS 會自動產生 Interop.NCTAUDIOEDITOR2Lib.dll 與 AxInterop.NCTAUDIOEDITOR2Lib.dll 到 obj\Debug,並正確註冊事件介面。
  4. 刪除專案中手動加入的兩個 DLL 參考。

為何有效

  • VS 產生的 Interop 組件帶有正確的 PrimaryInteropAssembly 屬性與強名稱簽名。
  • 事件介面 (_NCTAUDIOEDITOR2Events) 正確連接,避免 LoaderLock 競態。
  • 繞過手動複製 DLL 可能帶來的版本不匹配、簽名失效問題。

補充:若 COM 元件未註冊

以管理員身分執行 regsvr32 NCTAUDIOEDITOR2.ocx 註冊後,再於 VS COM 標籤中引用。

驗證

重新建置專案,F5 調試不再彈出 LoaderLock 或 Protection Error,控件功能正常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved