c++ - 包含错误 MIDL2003 : redefinition when compiling ATL generated idl with windows. h 和 sql.h

标签 c++ visual-c++ visual-studio-2012 com odbc

作为要求的一部分,我必须在 ATL 生成的 idl 中包含 sql.hwindows.h。 不幸的是,当包含 sql.h

时,它一直在提示
1>c:\program files (x86)\windows kits\8.0\include\um\sqltypes.h(125): error MIDL2003: redefinition : SQLSCHAR
1>c:\program files (x86)\windows kits\8.0\include\um\sqltypes.h(131): error MIDL2003: redefinition : SQLUINTEGER

当包含 windows.h 时,它会提示

1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(347): error MIDL2003: redefinition : INT
1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(832): error MIDL2003: redefinition : Int64ShllMod32
1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(832): error MIDL2025: syntax error : expecting ; near "{"

注意 我正在通过 ODBC 创建一个 COM 包装器,因此我需要将这些文件包含在我生成的 idl 中

最佳答案

解决此问题的一种方法是在包含头文件之前定义 RC_INVOKED。这将跳过与 MS IDL 文件中的声明冲突的 typedef#define

import "oaidl.idl";
import "ocidl.idl";

#define RC_INVOKED 1
#include "windows.h"
#include "sql.h"

关于c++ - 包含错误 MIDL2003 : redefinition when compiling ATL generated idl with windows. h 和 sql.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688017/

相关文章:

c# - 如何在我的开发环境中从 Windows 7 x64 上的 C# 连接到 Oracle 数据库

javascript - jquery.min.js加载异常0x800a139e

c++ - 模板类中的数组定义

c++ - 如何遍历多个 map 并获取其值? -C++

c - 将 C99 功能用于跨平台应用程序

c++ - 在 MSVC 中使用数据成员指针作为模板参数

c# - 如何根据 VS2012 上另一个数据网格的选定行在数据网格上显示 sql 队列结果

c# - 如何禁用特定的 usb 端口 com2 c# 64 位

c++ - 在头文件中前向声明另一个命名空间的自定义类型

c++ - 错误LNK2019和LNK 1120