博客专栏

EEPW首页 > 博客 > SC_HANDLE重定义

SC_HANDLE重定义

发布人:电子禅石 时间:2025-06-06 来源:工程师 发布文章

错误 C2371 “SC_HANDLE”: 重定义;不同的基类型 的核心原因在于,编译器在处理 diagnostic_demo.cpp 这个文件时,遇到了两个关于 SC_HANDLE 的定义,并且这两个定义的类型不兼容。

你提供的代码是 typedef void* SC_HANDLE;。这本身没有问题,但问题在于,在编译器看到你这一行代码之前,它已经通过某个被包含的头文件看到了另一个 SC_HANDLE 的定义。

问题根源:与 Windows SDK 的冲突

SC_HANDLE 是一个在 Windows 操作系统编程中非常常见的类型定义,它代表“Service Control Manager Handle”(服务控制管理器句柄)。

这个类型通常在 Windows 的头文件 winsvc.h 中定义,而 winsvc.h 又经常被更常见的 windows.h 所包含。

在 winsvc.h 中,它的定义通常是这样的:

C

虽然最终类型都是 void*,但编译器在处理 typedef 时,会认为 typedef void* SC_HANDLE; 和 typedef HANDLE SC_HANDLE; 是基于不同基类型的重定义,因此会报 C2371 错误。

你的项目路径中包含 C-V2X\SDK\Middleware,这表明你正在一个复杂的SDK环境中工作,这个环境极有可能为了实现某些功能(如系统服务、底层通信等)而包含了 windows.h。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: windows

相关推荐

技术专区

关闭