Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как побороть ошибку error C2220:  (Прочитано 14477 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
sabbatazh
Помогающий

ua
Offline Offline

« : 13-03-2013 18:10 » 

Здравствуйте Уважаемые Знатоки! Помогите разобраться с ошибкой, возникающей при компиляции драйвера релизом под х64 на строке:
Код:
_snwprintf(name1,arraysize(name1), L"\\Device\\MDMAIDevice%d", devindex);
код ошибки: error C2220: warning treated as error - no 'object' file generated ... как это можно исправить, не прибегая к использованию установки параметров компилятора /WX??
полный блок кода :
Код:
UNICODE_STRING usDeviceName;
UNICODE_STRING usSymlinkName;
//...
static LONG lastindex = -1;
   LONG devindex  = InterlockedIncrement(&lastindex);

WCHAR name1[32];
WCHAR name2[32];

_snwprintf(name1,arraysize(name1), L"\\Device\\MDMAIDevice%d", devindex);// ОШИБКА !!!
_snwprintf(name2,arraysize(name2), L"\\DosDevices\\MDMAIDevice%d", devindex);

RtlInitUnicodeString(&usDeviceName, name1);
RtlInitUnicodeString(&usSymlinkName, name2);
Огромное СПАСИБО!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 13-03-2013 18:18 » 

Судя по тексту ошибки, это не причина, а следствие. Должны быть другие ошибки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 13-03-2013 22:18 » 

1. начнем с того что лучше привести вызов _snwprintf() в соответствие с рекомендацией DDK:
Summary of Kernel-Mode Safe String Functions (Windows Drivers)
2. где определение  arraysize ?
3. и главное, раз уж вы пользуетесь /WX то будьте добры сначала исправить варнинги без этого ключа) кстати какой варнинг оно там дает?
« Последнее редактирование: 13-03-2013 22:23 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #3 : 14-03-2013 16:49 » 

RXL, Других ошибок нет!(
Ochkarik, arraysize объявлен как
Код:
#define arraysize(p) (sizeof(p)/sizeof((p)[0]))
по пункту 1, почитаю исправлю!
по пункту 2, не использую ключ /WX , это решение нашел в интернете!(

Спасибо!
« Последнее редактирование: 14-03-2013 16:52 от sabbatazh » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 14-03-2013 16:55 » 

не понял юмора)))) как это не используете? такая ошибка может появится только при использовании этого ключа!
Compiler Error C2220
еще раз: уберите этот ключ в настройках проекта
"с/с++->compeler->General"  параметр "Treat Warning As Error" в положение  "No"
перекомпилите, и посмотрите лог компилятора. там будет warning на этой строке которые надо исправить. с другим кодом.

возможно оно связано с п. 1.
« Последнее редактирование: 14-03-2013 16:59 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #5 : 14-03-2013 17:29 » 

Ochkarik, какую из этих функций посоветуете?!
Код:
RtlStringCbPrintf
RtlStringCbPrintfEx
RtlStringCchPrintf
RtlStringCchPrintfEx
RtlUnicodeStringPrintf
RtlUnicodeStringPrintfEx
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 14-03-2013 18:33 » 

RtlUnicodeStringPrintf
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #7 : 14-03-2013 19:52 » 

Ochkarik, Спасибо!

Добавлено через 20 часов, 24 минуты и 17 секунд:
Вот, Что вышло!
Код:
static LONG lastindex = -1;
   LONG devindex  = InterlockedIncrement(&lastindex);

DECLARE_UNICODE_STRING_SIZE(usDeviceName, 200);
    DECLARE_UNICODE_STRING_SIZE(usSymlinkName, 200);

status = RtlUnicodeStringPrintf(&usDeviceName,  L"\\Device\\GPSDevice%d",     devindex);
RtlUnicodeStringPrintf(&usSymlinkName, L"\\DosDevices\\GPSDevice%d", devindex);
if (!NT_SUCCESS(status))
return status;

KdPrint(("DeviceName string: %wZ\n", usDeviceName));
KdPrint(("SymlinkName string: %wZ\n", usSymlinkName));
Все хорошо!
Спасибо!
« Последнее редактирование: 15-03-2013 16:16 от sabbatazh » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines