我试图使用纯C的窗口驱动程序,我正在工作。它是使用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
);会导致类似这样的错误(因为结构没有给ty胡枝子,因此需要以“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。但是它确实有它们,所以它应该编译得很好。或者我需要设置一些标志才能让它工作,或者这是微软的一个错误。如果他们犯了错误,请报告错误,并创建我自己的标题以供目前使用。
另外,如果微软是一个bug,我应该在哪里向它报告呢?
发布于 2022-01-12 14:35:39
IddCx似乎是C兼容的,但它不兼容。我已经向微软报告了这个问题。我已经创建了一个临时的自定义头文件,该文件是兼容的。它现在编译得很好。
https://stackoverflow.com/questions/70675511
复制相似问题