DWORD_PTR: undeclared identifier

Тема в разделе "WASM.WIN32", создана пользователем hasuhands1, 25 май 2006.

  1. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Раз пошла такая пьянка:
    Код (Text):
    1.  
    2. // из Native API Reference
    3. template <class T1, class T2> inline
    4. T1* Padd(T1* p, T2 n) {
    5.   return (T1*)((char *)p + n);
    6. }
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Four-F



    И тут ещё немного воды.

    Оказывается, эти XXX_PTR не являются никакими указателями. DWORD_PTR - это банальный int. По названию можно подумать, что это int*. Причём эти определения есть только в SDK, наверное, т.к. у меня в последнем вижуале в инклудах ничего похожего нет. Лишний раз убеждаюсь, что макросы - зло. Тем более, что они призваны обеспечить портабельность Win32 -> Win64.



    Кстати, чему равен sizeof(int) в 64-битной винде? Кажется, он всё ещё равен 4 для совместимости с "непортабельным" кодом. Иначе зачем было изобретать эти XXX_PTR...



    Да, ошибся я.
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    В 64-битной винде sizeof(int) = 4, и не в совместимости дело. int и long остались того же размера потому, что даже на 64-х битной архитектуре бОльшая часть данных прекрасно умещается в 4 байта, и глупо занимать старшие 4 байта на пустоту. А вот как только в дело вступают указатели, будьте-нате юзать 8 байт.



    А XXX_PTR придумали, чтобы можно было один и тот же код компилять как 32-х, так и 64-х -битный. Т.е., например, DWORD_PTR - это просто DWORD, но размером с указатель ;) На 32-х битах он равен 4, а на 64-х равен 8. Вот такой вот хитрый тип данных. Короче, опять гемора прибавили ;) Одна надежда - помереть раньше, чем 128-битные тачки появятся :)))
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Four-F



    Спасибо за инфу.



    long, конечно, не мог увеличиться, т.к. по стандарту определён 32-битным типом. А int, как базовый целочисленный тип, обычно привязан к архитектуре.





    Интересно, какую разрядность имеет ALU? Ведь все 64 бита действительно используются сравнительно редко.



    Additional Considerations для написания разрядно-независимого кода. Проще вести 2 параллельных проекта :dntknw:
     
  5. hasuhands1

    hasuhands1 New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    6
    Парни, определил я этот DWORD_PTR, поменял точку входа, как посоветовали, чтобы линкер не ругался. Откомпилилось.



    Но нифига не работает - бинарник должен скрывать самого себя. Может у кого есть время? Исходник 100% рабочий, как его откомпилить на VS6.0?



    И еще вопрос: стоит ли компилить такие вещи на VS2005? Это вообще возможно?