我已经实现了一个windows桌面带(使用windows SDK示例),并且需要一种与之通信的方法(一个调用来启动另一个应用程序的IPC,IPC已经在工作了)。
我的COM经验非常有限,但从我所看到的推断,我认为应该可以创建一个新的COM接口,在deskband对象(我可以通过IBandSite访问它)中实现它,在它上为我自己的接口调用QueryInterface(),然后使用它直接调用deskband。
我试过了,但很快就遇到了问题(主要原因是:我不知道我大部分时间都在做什么……)
所以,我的问题是:这是一种可行的方法吗?如果可行,谁能给我一个大纲,告诉我如何继续下去(或者指出一些可能有帮助的资源--除了阅读COM书籍,这将是我最后的方法)。如果不是,是否会想到替代方案?
感谢您抽出时间并致以最美好的祝福,
雷内。
发布于 2011-07-13 17:08:17
这是您的路径:您将一个新接口添加到.idl文件中,如果您在.idl文件中有一个与您的COM对象相对应的co-class,则在co-class定义中列出该新接口。然后编译.idl,这将得到一个.h文件和一个带有标识符的.c文件- C++ IID和C++接口定义。
然后,从C++接口继承COM对象C++类,并实现它的所有方法。如果由于某种原因不能或不想实现某个方法,则必须从该方法实现中返回E_NOTIMPL。
最后一件非常重要的事情是:您必须更改COM对象类中的QueryInterface()行为。如果使用ATL,则必须在COM映射中添加一个条目。如果您不使用ATL,请更改您的QueryInterface() -有关如何在实现多个COM接口的情况下实现QueryInterface()的信息,请参阅this question。
https://stackoverflow.com/questions/6662783
复制相似问题