4

作为要求的一部分,我必须在 ATL 生成的 idl中包含sql.h和。windows.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 中包含这些文件

4

1 回答 1

0

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

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

#define RC_INVOKED 1
#include "windows.h"
#include "sql.h"
于 2013-05-22T14:55:51.107 回答