Comdef.H的神秘包括

mysterious include of comdef.h

本文关键字:包括 Comdef      更新时间:2023-10-16

在我的项目中,由于byte的定义不明确,C2872有一些编译错误,在我设置-Include后,输出显示C2872是由于包含在文件中

C:\程序文件 (x86(\Microsoft 可视 Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\comdef.h

来自我的一个myado.h文件。

但是,这在myado.h任何地方都没有这样的包含,为什么它被包括在内?

myado.h做了这样的事情:

#import "C:/Program Files/Common Files/System/ado/msado15.dll"  rename("EOF", "adoEOF") rename("BOF", "adoBOF")
#include <icrsint.h>  // ADO C/C++ Record Binding Definitions
#define TESTHR(x) if FAILED(x) _com_issue_error(x)

,这里FAILED是定义在

c:\Program Files (x86(\Windows 工具包\10\包含\10.0.16299.0\共享\winerror.h

_com_issue_error定义在

c:\程序文件 (x86(\Microsoft 可视 Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\comutil.h

这是原因吗?

但是,如果是这种情况,由于marco的使用,头文件是如何被包含的?

或者,C++编译器Visual Studio如何识别宏定义?

所有的功劳都归于Ken White。

编译后,由于#import "C:/Program Files/Common Files/System/ado/msado15.dll" rename("EOF", "adoEOF") rename("BOF", "adoBOF")

,将在项目的Debug文件夹下生成一个msado15.tlh,其开头为:

// Created by Microsoft (R) C/C++ Compiler Version 14.12.25830.2 (dbe79e7e).
//
// c:c20180411hp_cpp17_01debugmsado15.tlh
//
// C++ source equivalent of type library C:/Program Files/Common Files/System/ado/msado15.dll
// compiler-generated file created 06/20/18 at 15:50:36 - DO NOT EDIT!
#pragma once
#pragma pack(push, 8)
#include <comdef.h>

瞧!