在我的项目中有一些编译错误 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/