OSDynamicCast 未在基本驱动程序包示例中编译
OSDynamicCast not compiling in basic driver kit example
我有一个非常简单的驱动程序包驱动程序。这几乎是样板。
我在尝试使用 OSDynamicCast
时遇到构建失败,如下所示
kern_return_t IMPL(MyHIDDriver, NewUserClient) {
IOService* client;
auto ret = Create(this, "MyTest", &client);
*userClient = OSDynamicCast(IOUserClient, client);
return ret;
}
我使用 OSDynamicCast 时出现以下问题。
Use of undeclared identifier 'gIOUserClientMetaClass'; did you mean 'gIOUserServerMetaClass'?
在添加 NewUserClient
覆盖之前,驱动程序 运行 很好(我在 IORegistry 中观察到了)。
我不确定 Xcode 中缺少什么会导致此问题。我引用的示例 完全符合我对 OSDynamicCast 的要求。
IOUserClient
头文件 #include
d 是否在这个编译单元的某处?听起来你只是想念
#include <DriverKit/IOUserClient.h>
与您遇到的问题完全无关,但您可能希望将 client
变量初始化为 nullptr
以避免在 Create
失败时出现未定义行为的问题:
IOService* client = nullptr;
documentation 不保证在调用失败时会自动设置为此值,因此后续的 OSDynamicCast
将暴露于未定义的行为。
我有一个非常简单的驱动程序包驱动程序。这几乎是样板。
我在尝试使用 OSDynamicCast
时遇到构建失败,如下所示
kern_return_t IMPL(MyHIDDriver, NewUserClient) {
IOService* client;
auto ret = Create(this, "MyTest", &client);
*userClient = OSDynamicCast(IOUserClient, client);
return ret;
}
我使用 OSDynamicCast 时出现以下问题。
Use of undeclared identifier 'gIOUserClientMetaClass'; did you mean 'gIOUserServerMetaClass'?
在添加 NewUserClient
覆盖之前,驱动程序 运行 很好(我在 IORegistry 中观察到了)。
我不确定 Xcode 中缺少什么会导致此问题。我引用的示例
IOUserClient
头文件 #include
d 是否在这个编译单元的某处?听起来你只是想念
#include <DriverKit/IOUserClient.h>
与您遇到的问题完全无关,但您可能希望将 client
变量初始化为 nullptr
以避免在 Create
失败时出现未定义行为的问题:
IOService* client = nullptr;
documentation 不保证在调用失败时会自动设置为此值,因此后续的 OSDynamicCast
将暴露于未定义的行为。