如何向Inproc COM服务器添加和实现新接口

时间:2011-07-12 10:30:57

标签: com winapi midl deskband

我已经实现了一个windows deskband(使用windows SDK示例)并且需要一种方法来与之通信(一次调用以启动IPC与另一个应用程序,IPC已经在工作)。

我的COM经验非常有限,但从我看到的内容推断,我认为应该可以创建一个新的COM接口,在deskband对象(我可以通过IBandSite访问)中实现它,调用QueryInterface( )为我自己的界面,然后用它直接打电话到桌面。

我已经尝试过但很快就遇到了问题(主要原因是:我不知道我大部分时间都在做什么......)

所以,我的问题是:这是一个可行的方法,有人可以给我一个关于如何进行的大纲(或指向一些可能有用的资源 - 没有阅读COM书,这将是我的最后的方法)。如果不是,那么可以考虑其他选择吗?

感谢您的时间和祝福,

勒内。

1 个答案:

答案 0 :(得分:0)

这是你的路径:在.idl文件中添加一个新接口,如果你在.idl文件中有一个与你COM对象对应的联合类,你在同类定义中列出了这个新接口。然后编译.idl,这会得到一个.h文件和一个带有标识符的.c文件--C ++ IID和C ++接口定义。

然后从C ++接口继承COM对象C ++类并实现它的所有方法。如果由于某种原因您不能或不想实现方法,则必须从该方法实现返回E_NOTIMPL

最重要的一件事:您必须在COM对象类中更改QueryInterface()行为。如果使用ATL,则必须在COM映射中添加一个条目。如果您不使用ATL更改QueryInterface() - 请参阅this question了解如何在实现多个COM接口的情况下实现QueryInterface()