IddCX header 导致纯 C 编译出错

IddCX header results in errors for pure C compilation

我正尝试将纯 C 用于我正在处理的 windows driver。它是一个使用 IddCx (um/iddcx/iddcx.h) 的 driver。这个 header 有一个 '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 中,我认为您不能为枚举定义类型): 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

如果 header 没有任何外部 C 包装器,我会假设它只是一个 Cpp API 并改用 Cpp。但它确实有它们,所以它应该编译得很好。要么我需要设置一些标志才能使其工作,要么这是微软的错误。如果这是他们的错误,我会报告错误并创建我自己的 header 以供现在使用。

此外,如果这是一个错误,我是否应该在某个地方向 Microsoft 报告此问题?

IddCx 似乎假设是 C 兼容的,但事实并非如此。我已将此问题报告给微软。我已经创建了一个兼容的临时自定义头文件。它现在编译得很好。