0

我正在尝试将纯 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。但它确实有它们,所以它应该编译得很好。要么我需要设置一些标志才能使其正常工作,要么这是微软的错误。如果这是他们的错误,请报告错误并创建我自己的标题以供现在使用。

另外,如果这是一个错误,我应该在哪里向微软报告这个问题?

4

1 回答 1

0

IddCx 似乎假设是 C 兼容的,但它不是。我已经向微软报告了这个问题。我创建了一个符合要求的临时自定义头文件。它现在编译得很好。

于 2022-01-12T14:35:39.810 回答