【问题标题】:Problem using a COM interface as parameter使用 COM 接口作为参数的问题
【发布时间】:2010-03-19 20:00:03
【问题描述】:

我有以下问题:

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

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

我尝试将 #include "Project1.h" 替换为 #include "Project1_i.h"#include "Project1_i.c" em>,但它给了我很多错误。

我还尝试使用 importlib("Project1.tlb") 并在库定义中定义我的接口 IMyInterface2。但是当我编译 Project2PS 项目时,会出现错误(如果没有定义接口,则不会生成类似 dlldata.c 的东西)。

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

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

顺便说一下,我用的是VS2008 SP1。

提前致谢。

【问题讨论】:

    标签: atl


    【解决方案1】:

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

    编辑

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

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

    我建议您让 IDL 文件将其标头写入单个通用包含目录,然后您可以将其添加到需要使用接口的任何项目的包含路径中。

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

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多