无法将类型为“*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 之后测试,通过.

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpcontlbexptypeconversion.asp

里有更详细的说明.

posted @ 2007-08-17 12:02  四六成双  阅读(1448)  评论(0编辑  收藏  举报