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 位 DLL | VS 屬性 → 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 檢查導出名、參數 |
MyActiveX.dll (Target x86),ComVisible(true)、Guid、ClassInterfaceType.AutoDual。regasm /codebase MyActiveX.dll。NativeLib.dll (x86) 複製到 C:\Windows\SysWOW64\。<object id="ax" classid="clsid:YOUR-GUID" width="0" height="0"></object>
<script> ax.TestCallNative(); </script>
ActiveX **僅 IE 支持**,Edge/Chrome/Firefox/Safari 均已移除。新專案請採用:
C# ActiveX 調用本地 DLL 核心:**註冊 regasm /codebase → DLL 位數匹配 → 放入系統目錄或同目錄 → IE 信任站點放行**。長遠看,請拥抱 WebAssembly 或桌面應用架構。