2016-01-19 6 views
1

Я изучаю разработку драйверов для окон, используя книгу. Они дали следующий пример:WDK-KMD Предупреждение C4100 Необязательный формальный параметр VS2015

#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 решений, но они, кажется, не работают в этом случае. Я уже пробовал отключить предупреждения компилятора, все равно не повезло.

Может ли кто-нибудь пролить свет?

+0

Вы подтвердили правильность соответствия прототипа? Вы подтвердили правильность определения типа аргумента? – sabbahillel

+0

Существует несколько продвинутых методов, которые значительно повышают читаемость структурированного кода, называемого «отступом». Проведите некоторое исследование по этому вопросу и, пожалуйста, всегда применяйте его к своему коду - будь то дома или размещены здесь. – Olaf

ответ

0

Компилятор предупреждает, что вы не используете некоторые из параметров функции. В вашем проекте также есть настройка для обработки предупреждений как ошибок.

Существует несколько способов решения проблемы.

  1. Измените настройки проекта, чтобы предупреждения не обрабатывались как ошибки.
  2. Добавить код, который использует параметры.

Пример использования параметров:

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); 
} 
+0

Спасибо, это действительно сработало !! - Я отключил настройки для обработки предупреждений как ошибок,/WX отключен, но это не сработало. только с использованием параметров – ValarMorghulis

1

Один из способов, чтобы отключить предупреждение, чтобы удалить имя параметра. Тогда очевидно (компилятору), что вы не можете его использовать. Поэтому ты не просто забыл.

Если вы можете использовать его позже, или вы хотите, чтобы сохранить имя в качестве документации, вы можете просто закомментировать:

void Unload(PDRIVER_OBJECT /* pDriverObject */) { 
    DbgPrint("Driver unloading...\n"); 
    return; 
} 
2

Сохраняя предупреждения на максимальном уровне является здоровой практикой. В дополнение к уже предлагаемым решениям существует также макрос WDK, который можно использовать внутри тела функции, чтобы указать, что этот параметр не используется - UNREFERENCED_PARAMETER(param).

 Смежные вопросы

  • Нет связанных вопросов^_^