ActiveX 控制項曾是 Web 應用擴展瀏覽器功能的主流技術(特別在 IE 環境)。雖然現代 Web 標準已轉向 HTML5/JS/WebAssembly,但在企業內部舊系統維護、特定硬體整合、簽章掃描等場景,ActiveX 仍有剛性需求。本系列將示範如何用熟悉的 C# 與 WinForms 開發真正可在網頁載入的 ActiveX 控制項。
Text="HelloWorld"、AutoSize=true。UserControl1,重命名為 Demo.cs(類別名同步改為 Demo)。預設 .NET 組件不允許來自網頁(部分信任)的呼叫。必須在 AssemblyInfo.cs 加入:
using System.Security;
[assembly: AllowPartiallyTrustedCallers()]
否則在非開發機器瀏覽網頁時會出現紅叉或權限錯誤。
using System.Runtime.InteropServices;
[Guid("9551B223-6188-4387-B293-C7D9D8173E3A")] // 使用 VS「工具」→「建立 GUID」產生
[ComVisible(true)]
public class Demo : UserControl
{
// ...
}
GUID 必須固定,它是控制項在登錄表與網頁 classid 的唯一識別碼。
regasm /codebase 註冊組件至登錄表(需管理員權限)。
HelloWorld.dll)。HelloWorld.Demo,確認顯示為 COM 物件。<object id="helloworld" classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" width="184" height="96"></object>
<object id="helloworld" classid="https://localhost/HelloWorld.dll#HelloWorld.Demo" width="184" height="96"></object>
此方式需將 DLL 放在 IIS 虛擬目錄,且不支援跨網域/正式部署。
<object id="helloworld" classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" width="184" height="96"></object>
瀏覽器依 CLSID 查詢登錄表,找到對應 DLL 載入。此為標準 ActiveX 載入機制。
[assembly: AllowPartiallyTrustedCallers()]。regasm /codebase HelloWorld.dll(或執行安裝程式)完成註冊。本文完成了 C# ActiveX 控制項的「最小可行產品」:WinForms UserControl → APTCA → Guid+ComVisible → COM Interop 註冊 → classid 網頁載入。此為後續擴充功能(JS 互動、檔案/登錄存取、自動部署、代碼簽章)的基石。