无法将类型为“*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 @   四六成双  阅读(1513)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示