我正在尝试将纯 C 用于我正在研究的 Windows 驱动程序。它是使用 IddCx (um/iddcx/iddcx.h) 的驱动程序。这个头文件有一个 'extern "c"` 包装器以允许 C 编译。问题是'extern“C”'块中的代码不是C。我得到了这两个问题。
像这样的枚举声明:
enum IDDCX_MONITOR_MODE_ORIGIN : UINT
{
IDDCX_MONITOR_MODE_ORIGIN_UNINITIALIZED = 0,
/// <summary>
/// Indicates that the driver added this mode from directly processing the monitor description
/// </summary>
IDDCX_MONITOR_MODE_ORIGIN_MONITORDESCRIPTOR = 1,
/// <summary>
/// Indicates that the driver did not add this mode as a direct resolution of processing the modes
/// supported by the monitor but because of separate additional knowledge it has about the monitor
/// </summary>
IDDCX_MONITOR_MODE_ORIGIN_DRIVER = 2,
};
这会导致这样的错误(在 C 中,我认为您不能为 Enum 定义类型):
error C2059: syntax error: ':'
和这样的函数声明:
typedef
_Function_class_(EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION)
_IRQL_requires_same_
NTSTATUS
NTAPI
EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION(
_In_
const IDARG_IN_PARSEMONITORDESCRIPTION* pInArgs,
_Out_
IDARG_OUT_PARSEMONITORDESCRIPTION* pOutArgs
);
这会导致这样的错误(由于没有给定 typedef 的结构,因此需要以“struct”为前缀):
error C2143: syntax error: missing ')' before '*'
error C2143: syntax error: missing '{' before '*'
error C2143: syntax error: missing ';' before '*'
warning C4218: nonstandard extension used: must specify at least a storage class or a type
error C2059: syntax error: ')'
warning C4218: nonstandard extension used: must specify at least a storage class or a type
如果标头没有任何外部 C 包装器,我会假设它是仅 Cpp 的 API 并改用 Cpp。但它确实有它们,所以它应该编译得很好。要么我需要设置一些标志才能使其正常工作,要么这是微软的错误。如果这是他们的错误,请报告错误并创建我自己的标题以供现在使用。
另外,如果这是一个错误,我应该在哪里向微软报告这个问题?