c++ - comdef.h 的神秘包含

标签 c++ macros include-path

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

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.12.25827\include\comdef.h

来 self 的一个 myado.h 文件。

但是,myado.h中的任何地方都没有这样的include,怎么会包含呢?

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 Kits\10\Include\10.0.16299.0\shared\winerror.h

_com_issue_error定义在

c:\Program Files (x86)\Microsoft Visual 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_01\debug\msado15.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>

,瞧!

关于c++ - comdef.h 的神秘包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958992/

相关文章:

usability - 宏的速度命名参数

php - 在 PHP 中设置包含路径间歇性失败

c++ - 如何在全局范围内添加包含路径到 clang

c++ - new 和 delete 超出范围的内存管理

c++ - 链接可变函数调用

delphi - 有人有 Delphi IDE 宏列表吗?

c++ - 如何防止意外包含旧标题?

c++ - 错误 : argument of type ‘char (CharStack::)()const throw (CharStack::Underflow)’ does not match ‘char’

c++ - 为什么英特尔编译器忽略英特尔 MIC 的非时间预取 pragma 指令?

c# - 使用 C# 为 Outlook 添加隐藏密件抄送