[试图编写通用代码以针对多个版本的ODBC标头进行编译时,我很好奇SQL_PARAM_OUTPUT_STREAM
是否可用。例如一个人可以写:
SQL_PARAM_OUTPUT_STREAM
看着#include <sql.h>
#include <sqlext.h>
#if ODBCVER >= 0x380 // e.g. ODBC version is > 3.8
// SQL_PARAM_OUTPUT_STREAM is available
...
#endif
,我看到它说:
unixodbc sql.h
(我认为注释已过期(?),似乎0x0380表示3.8)
因此,这种定义形式使您可以在包含 /****************************
* default to 3.51 declare something else before here and you get a whole new ball of wax
***************************/
#ifndef ODBCVER
#define ODBCVER 0x0380
#endif
之前对#define
进行自己的ODBCVER
处理,并可能对其进行“降级”以仅支持较旧的标准进行编译。如果不这样做,它将是标题可以支持的最高版本。
...但是我在Microsoft文档中找不到有关<sql.h>
的任何信息。实际上没有标准的方法可以感知要针对其进行编译的头文件中的定义吗?像ODBCVER
这样的东西作为#ifdef SQL_PARAM_OUTPUT_STREAM
上的“特征检测”形式会更好吗?
sql.h
可能未出现在文档中,但绝对受支持。它通过Windows SDK一部分的ODBC标头显示。
例如,当前系统上位于ODBCVER
的最新SDK以及同一目录引用C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\sql.h
中的其他7个文件。