1. 程式人生 > >無法將型別為“*Class”的 COM 物件強制轉換為介面型別 失敗原因.

無法將型別為“*Class”的 COM 物件強制轉換為介面型別 失敗原因.

在用.net2.0呼叫COM的某方法時報:

System.InvalidCastException: 無法將型別為“*Class”的 COM 物件強制轉換為介面型別“I*”。此操作失敗的原因是對 IID 為“{BBB9E30B-B4EB-4560-B5A7-1B59B33EF6BF}”的介面的 COM 元件呼叫 QueryInterface 因以下錯誤而失敗: 不支援此介面 (異常來自 HRESULT:0x80004002 (E_NOINTERFACE)) .

對比了能正確呼叫的介面和不能正確呼叫的區別,發現

[
 object,
 uuid(66F0009A-EAAC-4C78-9EF4-9617D49D50A2),
 dual, //---------------------錯誤介面沒有設定這個屬性.
 nonextensible,
 helpstring(""),
 pointer_default(unique)
]
interface IGDataBase : IDispatch{ 

................

}

加上dual 之後測試,通過.

裡有更詳細的說明.