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

C# ActiveX 控件調用本地 DLL 部署全攻略

     編輯:程式設計綜合問答

現象

C# 編寫 ActiveX 控件(ComVisible(true)),內部 DllImport 調用非托管 NativeLib.dll。網頁嵌入 <object classid="clsid:..."> 後,DLL 調用無響應、無異常、無日誌。

根因排查清單

檢查項標準要求驗證方法
ActiveX 註冊regasm /codebase YourControl.dll /tlb:YourControl.tlb 管理員運行regsvr32 不適用 .NET 組件;查看註冊表 HKCR\CLSID\{...}
DLL 位數匹配IE/Edge 32 位進程 → NativeLib.dll 必須 32 位;x64 瀏覽器需 64 位 DLLVS 屬性 → Build → Platform target / dumpbin /headers NativeLib.dll
DLL 搜尋路徑1. 應用目錄 2. 系統目錄 3. PATH 目錄將 NativeLib.dll 放在 C:\Windows\SysWOW64 (32位) 或 System32 (64位) **或** 與 .dll 同目錄
信任站點/安全區域IE 選項 → 安全 → 可信站點 → 添加頁面域名 → 自定義級別 → 「未標記為安全的 ActiveX 控件初始化並腳本訪問」→ 啟用/提示F12 控制台查看「Access denied」錯誤
DllImport 簽名[DllImport("NativeLib.dll", CallingConvention = CallingConvention.Cdecl)] 需與 C++ 導出一致用 Dependency Walker 檢查導出名、參數

最小可行部署步驟

  1. 編譯 C# 控件庫 MyActiveX.dll (Target x86),ComVisible(true)、Guid、ClassInterfaceType.AutoDual。
  2. 管理員 CMD:regasm /codebase MyActiveX.dll。
  3. 將 NativeLib.dll (x86) 複製到 C:\Windows\SysWOW64\。
  4. HTML 測試頁:
    <object id="ax" classid="clsid:YOUR-GUID" width="0" height="0"></object>
    <script> ax.TestCallNative(); </script>
  5. IE 加載頁面 → 允許 ActiveX 運行 → 觀察效果。

現代替代建議

ActiveX **僅 IE 支持**,Edge/Chrome/Firefox/Safari 均已移除。新專案請採用:

  • WebAssembly:將 C/C++ 編譯為 .wasm,JS 直接調用,跨平台、無安裝。
  • Native Messaging:瀏覽器擴展 + 本地宿主進程 (stdin/stdout JSON-RPC),權限可控。
  • Electron / Tauri / WebView2:桌面應用內嵌 Chromium/Edge,直接調用 Node.js / C# / Rust 原生能力。

總結

C# ActiveX 調用本地 DLL 核心:**註冊 regasm /codebase → DLL 位數匹配 → 放入系統目錄或同目錄 → IE 信任站點放行**。長遠看,請拥抱 WebAssembly 或桌面應用架構。

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