在一個「電子地圖 + 視頻監控」項目中,受限於現有 C# 團隊與 C++ 底層框架,選擇 .NET 宿主 ActiveX 控件作為橋接方案。本文梳理 ActiveX 開發的核心脈絡、兩大接口模式、多線程事件回調坑點,並附贈調試工具與代碼備忘錄。
ActiveX 本質是基於 COM 的控件規範,通過 IUnknown、IDispatch 實現跨語言調用。理解 COM 的「介面契約、引用計數、聚合/包含」是閱讀 MFC/ATL 向導生成代碼的前提。推薦精讀潘愛民《COM 本質論》。
前端(JS)註冊事件監聽器,ActiveX 後台任務完成後觸發事件,前端在事件處理函數中獲取結果。這類似於經典的回調函數模式。
參考閱讀:阮一峰《Javascript 異步編程的 4 種方法》
若在後台工作線程中直接 Fire_Event(),前端無法收到事件。原因在於 COM 的單元模型:事件連接點要求在創建該連接點的線程(通常是 UI 主線程/STA 線程)中觸發。
PostMessage 向主線程窗口發送自定義消息。Fire_Event()。

若提示找不到事件介面,手動在對應 .h/.cpp 中補全聲明與實現。

// 同步調用
var ret = obj.SyncMethod(param);
// 異步調用 + 事件註冊
obj.AsyncMethod(param);
obj.attachEvent("OnResult", function(result) {
console.log("異步結果:", result);
});
Authenticode 簽名、CAB 打包、.inf 安裝腳本編寫屬前端部署範疇,網上資源豐富,此處不贅述。