CoCreateInstance返回E_NOTIMPL

blackblue 2004-01-11 03:25:52
在客户端使用CoCreateInstance创建一个进程外接口时,
如果该接口派生自IDispatch,就可以正常创建,

如果该接口派生自IUnknown,就返回E_NOTIMPL,调试后可以肯定在服务器侧已成功的创建了接口实例。不知道是不是和接口列集有关?

哪位大哥给解释一下?
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackblue 2004-01-13
  • 打赏
  • 举报
回复
非常感谢,问题已解决
lop5712 2004-01-11
  • 打赏
  • 举报
回复
楼主的错误是因为使用了Service,即一个进程外组件,必须使用列集。但楼主使用了标准列集方式(组件没有实现IMarshal),却没有提供对应的代理/占位组件,因此只对那个接口错误,如果楼主换成声请IUnknown*接口的话,应该不会出错(不过就只能调用那3个函数)。

下面的帖子和楼主的问题是同样的,楼主可参考其中的步骤生成代理/占位组件并注册。
http://expert.csdn.net/Expert/topic/2604/2604535.xml?temp=.3787653

而至于为什么从IDispatch派生的可以没事,那是因为IDispatch的代理/占位组件已经实现编好了,存于ole32.dll中,因此即使楼主没有提供它的代理/占位组件依然可以成功调用。
blackblue 2004-01-11
  • 打赏
  • 举报
回复
不好意思,刚才发现CoCreateInstance返回的是E_NOINTERFACE,而不是E_NOTIMPL,
正确的问题应该是这样的:

在客户端使用CoCreateInstance创建一个进程外接口时,
如果该接口派生自IDispatch,就可以正常创建,

如果该接口派生自IUnknown,就返回E_NOINTERFACE,调试后可以肯定在服务器侧已成功的创建了接口实例。不知道是不是和接口列集有关?

希望各位帮忙解决。
blackblue 2004-01-11
  • 打赏
  • 举报
回复
客户端是VC.你可以试试
(1)服务器侧使用ATL向导生成一个Service,然后New ATL Object,其中Interface设为Custom,添加新类编译即可
(2)客户端导入类型库后调用CoCreateInstance

就会出这个问题
GameWeaver 2004-01-11
  • 打赏
  • 举报
回复
帮你顶
wangweixing2000 2004-01-11
  • 打赏
  • 举报
回复
这个意思是你没有导入类型库或者说你的导入库是错误的!你看看你的控件支持双接口吗?如果你在接口派生自IDispatch,可以正常创建,那么IUnknown就不会有问题!你还要看看你的客户端是什么语言了!如果是在vb下只能在IDispatch下!因为在那些宏语言(vb、asp...)导入库只支持IDispatch接口。
blackblue 2004-01-11
  • 打赏
  • 举报
回复
请顺便告知如何解决?谢谢了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧