在编译ATL生成的idl(包括windows.h和sql.h)时重新定义

error MIDL2003: redefinition when compiling ATL generated idl with windows.h and sql.h included

本文关键字:sql 定义 新定义 windows ATL 编译 包括 idl      更新时间:2023-10-16

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

时,它继续抱怨。
1>c:program files (x86)windows kits8.0includeumsqltypes.h(125): error MIDL2003: redefinition : SQLSCHAR
1>c:program files (x86)windows kits8.0includeumsqltypes.h(131): error MIDL2003: redefinition : SQLUINTEGER

windows.h加入时,它抱怨

1>C:Program Files (x86)Windows Kits8.0Includeumwinnt.h(347): error MIDL2003: redefinition : INT
1>C:Program Files (x86)Windows Kits8.0Includeumwinnt.h(832): error MIDL2003: redefinition : Int64ShllMod32
1>C:Program Files (x86)Windows Kits8.0Includeumwinnt.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"