Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向Inproc COM服务器添加和实现新接口_Com_Winapi_Midl_Deskband - Fatal编程技术网

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

如何向Inproc COM服务器添加和实现新接口,com,winapi,midl,deskband,Com,Winapi,Midl,Deskband,我已经实现了一个windows deskband(使用windows SDK示例),并且需要一种与它通信的方式(一次调用启动另一个应用程序的IPC,IPC已经在工作) 我的COM经验非常有限,但根据我所看到的推断,我认为应该可以创建一个新的COM接口,在deskband对象中实现它(我可以通过IBandSite访问该对象),为我自己的接口调用QueryInterface(),然后使用它直接调用deskband 我尝试过这个,但很快就遇到了问题(主要原因是:我不知道我大部分时间实际上在做什么…)

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

我的COM经验非常有限,但根据我所看到的推断,我认为应该可以创建一个新的COM接口,在deskband对象中实现它(我可以通过IBandSite访问该对象),为我自己的接口调用QueryInterface(),然后使用它直接调用deskband

我尝试过这个,但很快就遇到了问题(主要原因是:我不知道我大部分时间实际上在做什么…)

因此,我的问题是:这是一种可行的方法吗?如果可行,有人能给我一个如何进行的提纲吗(或者指出一些可能有用的资源——除了阅读COM书籍,这是我的最后一种方法)。如果不是,你会想到其他选择吗

感谢您抽出时间,并致以最良好的祝愿


Rene.

这是您的路径:您将一个新接口添加到.idl文件中,并且如果.idl文件中有一个与您的COM对象相对应的co类,则在co类定义中列出该新接口。然后编译.IDL,这就得到了一个.h文件和一个带有标识符的.c文件——C++ IID和C++接口定义。 <>你从C++接口继承COM对象C++类并实现它的所有方法。如果出于任何原因,您不能或不想实现某个方法,则必须从该方法实现返回
E_NOTIMPL


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

您到底想要什么-引入一个新的COM接口并在COM对象中实现它?@sharptooth:是,这就是我所想的:在deskband中实现接口,并通过IBandSite::GetBandObject返回的对象调用它。这是我第一次尝试失败的方式(由于一些错误,例如没有编译和注册rpc代理的dll)。看完你的帖子后,我又试了一次,结果成功了!谢谢你的帮助,雷内。