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

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

ua
Offline Offline

« : 12-06-2012 16:08 » 

Здравствуйте Уважаемые Знатоки!!!
 Возник вопрос по устранению ошибки C2220 в драйвере х64! (error C2220: warning treated as error - no 'object' file generated)
 Когда собираю проект драйвера в дебаге, все нормально, а вот при сборке релиза возникает эта ошибка (VS2010). Как с ней бороться???
Код: (C++)
struct XDSP_DMA_BUFFER_PTRS_32
{  
    ULONG*POINTER_32 DMABufferUserPtr1;
    ULONG*POINTER_32 DMABufferUserPtr2;
    ULONG*POINTER_32 DMABufferUserPtr3;
    ULONG*POINTER_32 DMABufferUserPtr4;
 
    ULONG  DMABufferPhysPtr1;
    ULONG  DMABufferPhysPtr2;
    ULONG  DMABufferPhysPtr3;
    ULONG  DMABufferPhysPtr4;
};
//...
XDSP_DMA_BUFFER_PTRS_32* pBuffer = (XDSP_DMA_BUFFER_PTRS_32*)ExAllocatePool(NonPagedPool,cbout);
//... проверка создания pBuffer...
//...
pBuffer->DMABufferUserPtr1 = (ULONG*POINTER_32) MmMapLockedPagesSpecifyCache(DmaBufferMemory1, UserMode, MmCached, NULL, FALSE, NormalPagePriority); // сама ошибка
//...
Наверное, я не так что-то делаю?!
 нашел http://msdn.microsoft.com/ru-ru/library/ks...a(v=vs.90).aspx но чет не помогло...
 Спасибо Огромное!
Записан
Ochkarik
Модератор

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

« Ответ #1 : 12-06-2012 20:52 » 

когда вы компилите в дебаге у вас на этой строке варнинг возникает, который вы не устранили.
а в релизе вы "экстремальную" проверку на варнинги включили, когда любое предупреждение рассматривается как ошибка. посмотрите в настройках линкера "warning treated as error".
либо исправьте варнинг,  дебаге у вас на этой строке должен быть показан - какой и где именно..
Записан

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

ua
Offline Offline

« Ответ #2 : 13-06-2012 13:51 » 

Цитата
когда вы компилите в дебаге у вас на этой строке варнинг возникает, который вы не устранили.
нет!  Здесь была моя ладья...
Цитата
а в релизе вы "экстремальную" проверку на варнинги включили, когда любое предупреждение рассматривается как ошибка. посмотрите в настройках линкера "warning treated as error"
Это что такое?!  Не понял
и соответственно не могу проверитьна варнинг и исправить!

Добавлено через 56 минут и 44 секунды:
Сам виноват, что через одно место смотрел!!! Нашел варнинги ...  Не может быть... RTFM
warning C4244: 'type cast' : conversion from 'PVOID' to 'ULONG * __ptr32', possible loss of data
Устранил!
Код: (C++)
pBuffer->DMABufferUserPtr1 = (ULONG*__ptr32)(ULONG)MmMapLockedPagesSpecifyCache(DmaBufferMemory1, UserMode, MmCached, NULL, FALSE, NormalPagePriority);
и все хорошо!
Ochkarik, Вы как всегда на высоте!)
Тему можно закрывать!
Спасибо!
« Последнее редактирование: 13-06-2012 14:48 от sabbatazh » Записан
Ochkarik
Модератор

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

« Ответ #3 : 13-06-2012 19:54 » 

тока вот может быть стоит приведение типа (ULONG)Ptr заменить на макрос PtrToUlong(Ptr)...
скорее всего будет то же самое, но не зря же они его определяли)
Цитата
Use the PtrToLong or PtrToUlong function to truncate pointers.
If you must truncate a pointer to a 32-bit value, use the PtrToLong or PtrToUlong function (defined in Basetsd.h). These functions disable the pointer truncation warning for the duration of the call.

Добавлено через 1 минуту и 38 секунд:
и наверное правильнее вернуть (ULONG*__ptr32) на (ULONG*POINTER_32). в связи с чем вы его поменяли?
« Последнее редактирование: 13-06-2012 19:58 от Ochkarik » Записан

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

ua
Offline Offline

« Ответ #4 : 14-06-2012 04:57 » new

Цитата
и наверное правильнее вернуть (ULONG*__ptr32) на (ULONG*POINTER_32). в связи с чем вы его поменяли?
Поменял как контекст из варнинга… почитал еще доки по данному типу и вернул на место POINTER_32.
Цитата
тока вот может быть стоит приведение типа (ULONG)Ptr заменить на макрос PtrToUlong(Ptr)...
учту!

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines