编译器警告(等级 1)C4772

#import 引用了缺少的类型库中的类型;“missing-type”用作占位符

使用 #import 指令引用了一个类型库。 但类型库包含对未使用 #import 引用的另一个类型库的引用。 编译器未找到其他 .tlb 文件。

请注意,如果使用 /I(附加包含目录)编译器选项指定这些目录,编译器在其他目录中将找不到类型库。 如果需要编译器在其他目录中查找类型库,请将这些目录添加到 PATH 环境变量。

默认情况下,此警告作为错误发出。 不能使用 /W0 禁止显示 C4772。

示例

这是重现 C4772 所需的第一个类型库。

// c4772a.idl
[uuid("f87070ba-c6d9-405c-a8e4-8cd9ca25c12b")]
library C4772aLib
{
   [uuid("f87070ba-c6d9-405c-a8e4-8cd9ca25c100")]
   enum E_C4772a
   {
      one, two, three
   };
};

这是重现 C4772 所需的第二个类型库。

// c4772b.idl
// post-build command: del /f C4772a.tlb
// C4772a.tlb is available when c4772b.tlb is built
[uuid("f87070ba-c6d9-405c-a8e4-8cd9ca25c12d")]
library C4772bLib
{
   importlib ("c4772a.tlb");
   [uuid("f87070ba-c6d9-405c-a8e4-8cd9ca25c12e")]
   struct S_C4772b
   {
      enum E_C4772a e;
   };
};

以下示例生成 C4772:

// C4772.cpp
// assumes that C4772a.tlb is not available to the compiler
// #import "C4772a.tlb"
#import "C4772b.tlb"   // C4772 uncomment previous line to resolve
                       // and make sure c4772a.tlb is on disk