C# DLL 已註冊 (regasm / gacutil 成功),PHP 實例化 new COM("CodeData.GetData") 拋出 Failed to create COM object。
[assembly: ComVisible(true)] 已設置[ComVisible(true)]、[ClassInterface(ClassInterfaceType.AutoDual)]regasm CodeData.dll /tlb:CodeData.tlb /codebase
gacutil /i CodeData.dll
檢查註冊表 HKEY_CLASSES_ROOT\CodeData.GetData\CLSID 是否存在,並指向正確 CLSID。
php.ini 啟用 com.allow_dcom = truetry {
$com = new COM("CodeData.GetData");
$result = $com->GetData();
} catch (com_exception $e) {
echo "COM Error: " . $e->getMessage() . " (Code: " . $e->getCode() . ")";
// 關鍵:輸出 $e->getTraceAsString() 定位行號
}
exec() 調用並解析 stdout/JSON| 現象 | 可能原因 |
|---|---|
| Class not registered | CLSID 未註冊或 32/64 位不匹配 |
| Access denied | DCOM 權限未配置 (dcomcnfg → 元件服務 → 我的電腦 → COM 安全性) |
| Type mismatch | 方法簽名包含非 COM 類型 |
| Server execution failed | C# 代碼拋出未捕獲異常 |
建議優先採用 HTTP API 方案,避開 Windows COM 複雜的部署與權限地雷區。