使用COM接口作为参数时出现问题

时间:2009-07-29 19:30:12

标签: atl

我有以下问题:

我必须投射 Project1 Project2 。在 Project1 中,我有一个界面 IMyInterface 。在 Project2 中,我有一个接口 IMyInterface2 ,其方法接收指向 IMyInterface1 的指针。

当我使用 import“Project1.idl”;在我的 Project2.idl 中, #include“Project1.h”出现在 Project2 ___ i.h 中。但是这个文件甚至不存在! 将定义到其他库中的接口导入idl文件的正确方法是什么?

我尝试用 #include“Project1_i.h” #include“Project1_i.c”替换 #include“Project1.h” ,但它给了我很多错误。

我还尝试使用 importlib(“Project1.tlb”),并在库定义中定义我的界面 IMyInterface2 。但是当我编译Project2PS项目时,会引发错误(如果没有定义接口,则不会生成类似 dlldata.c 的内容)。

我尝试创建一个虚拟 Project1.h 。但是当编译 Project2 ___ i.h 时,编译器找不到 MyInterface1 。如果我包含 Project1 ___ i.h ,我会再次遇到很多错误!

显然,这是一个简单的问题,但我不知道如何解决它。我坚持了!。

顺便说一下,我正在使用VS2008 SP1。

提前致谢。

1 个答案:

答案 0 :(得分:2)

不要在标头中包含* _i.c文件。您可以从源文件(.cpp)执行此操作,作为将其链接到的简单方法。

修改

您可以完全独立地处理单独的IDL文件及其产品。在包含从每个IDL文件生成的普通头文件的阶段,无需担心将它们组合在一起。

要处理IDL,请将其添加到项目中。这会导致MIDL在其上运行,并输出头文件。 (默认情况下它也会输出其他内容,但它们不是必需的。)

我建议您将IDL文件写入一个公共包含目录,然后将其添加到需要使用这些接口的任何项目的包含路径中。

然后只需使用#include为您需要的每个接口提取头文件。由于公共包含目录位于项目的路径上,#include中的嵌套header2.h将能够引入header1.h