Здравствуйте, Den Raskovalov, Вы писали:
DR>Всем привет
DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.
Для начала следует выяснить что именно понимается под DWORD.
Возможно под тем DWORD ом хранится число, а возможно указатель. Поэтому могут требоваться различные типы DWORDов: DWORD, DWORD64, DWORD_PTR. Если под DWORDом поинмается дескриптор, то на самом деле там может быть как DWORD (или, что в данном случае то же самое, LONG), так и указатель на структуру.
Для повышения инкапсуляции хендлов могут быть использованы даже не указатели на структуры, а собственно структуры.
Язык С++ предоставляет шаблоны для реализации высокоуровневых абстракции, что позволяет составлять обобщённые алгоритмы, работающие с различными типами данных, в том числе и типами, разработанными после составления этих алгоритмов. Компилятор в Visual Studio 2005 предоставляет дополнительные расширения, упрощающий реализацию шаблонов. Так, подпрограмма для обнуления DWORD может быть реализована следующим образом:
template <class DWORD> void nullify(DWORD& dword)
{
dword = DWORD();
}
Пример использования:
int _tmain(int argc, _TCHAR* argv[])
{
DWORD s1;
DWORD_PTR s2;
DWORD64 s3;
struct { DWORD unused; } * s4;
struct { DWORD unused; } s5;
nullify(s1);
nullify(s2);
nullify(s3);
nullify(s4);
nullify(s5);
return 0;
}
Кстати, буквально "double word" означает "двойное слово", поэтому размер "настоящего" DWORD зависит от разрядности процессора и равен 64 битам на 32разрядном процессоре. Реализации DWORD из windows.h однако имеют другой размер — по историческим причинам.