WDK-KMD警告C4100未引用形式参数VS2015
我正在用一本书学习windows驱动程序开发。 他们举了以下例子:WDK-KMD警告C4100未引用形式参数VS2015,c,device-driver,wdk,windows-kernel,C,Device Driver,Wdk,Windows Kernel,我正在用一本书学习windows驱动程序开发。 他们举了以下例子: #include "ntddk.h" void Unload(PDRIVER_OBJECT pDriverObject) { DbgPrint("Driver unloading...\n"); return; } NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegPath) { pDriverObject->DriverUnl
#include "ntddk.h"
void Unload(PDRIVER_OBJECT pDriverObject) {
DbgPrint("Driver unloading...\n");
return;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegPath) {
pDriverObject->DriverUnload=Unload;
DbgPrint("Driver has been loaded..");
return (STATUS_SUCCESS);
}
每当我尝试编译此文件时,都会收到以下错误和警告:
error C2220: warning treated as error - no 'object' file generated
warning C4100: pDriverObject and RegPath: unreferenced formal parameter.
我已经环顾了stackoveflow,寻找解决方案,但在这种情况下,它们似乎不起作用。
我已经尝试禁用编译器警告,但仍然没有成功
有人能解释一下吗?编译器警告您不要使用某些函数参数。您的项目还具有将警告视为错误的设置 有两种方法可以解决这个问题
void Unload(PDRIVER_OBJECT pDriverObject) {
DbgPrint("Driver of type %d unloading...\n", pDriverObject->Type);
return;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegPath) {
pDriverObject->DriverUnload=Unload;
DbgPrint("Driver has been loaded... (RegPath pointer=%p)\n", RegPath);
return (STATUS_SUCCESS);
}
禁用警告的一种方法是删除参数的名称。很明显(对编译器来说)您不能使用它。所以你没有忘记 如果您以后可能会使用它,或者希望保留该名称作为文档,您可以将其注释掉:
void Unload(PDRIVER_OBJECT /* pDriverObject */) {
DbgPrint("Driver unloading...\n");
return;
}
保持最大程度的警告是最健康的做法。除了已经建议的解决方案外,还有一个WDK宏,您可以在函数体内部使用它来指示未使用参数-
未引用的_参数(param)
您是否验证原型是否正确匹配?您是否验证了参数类型的定义是否正确?有一些高级技术可以大大提高结构化代码的可读性,称为“缩进”。对它做一些研究,并请始终将其应用到您的代码中-无论是在家中还是在这里发布。感谢它确实起了作用!!-我确实禁用了将警告视为错误的设置,/WX被禁用,但这不起作用。仅使用参数