правильное преобразование дворда в указатель

Тема в разделе "LANGS.C", создана пользователем rain, 30 июл 2007.

  1. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    к примеру такой код всегда бросает ворнинг, хотелось бы убрать его:
    Код (Text):
    1.     PVOID lpBase;
    2.     DWORD temp;
    3.     temp = 0;
    4.     lpBase = (PVOID)temp;
    если включена опция treat warnings as errors по лучаем:
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    DWORD_PTR

    http://www.microsoft.com/whdc/driver/kernel/64bit_chklist.mspx

    И вообще поищи в сети про портирование на 64 бита.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Four-F
    опередил =)
     
  5. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    спасибо только в данном случае я компилил 32 битное приложение
    n0name а я и не знал что перевод есть :)
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rain

    lpBase = reinterpret_cast<PVOID>(temp);
     
  7. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    всем ещё раз спасибо всё что нужно было это инлайновая функция DWordToPtrdiffT
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    std::ptrdiff_t DWordToPtrdiffT(DWORD value)
    {
    return (&value)[value] - (&value)[0];
    }

    ? :)
     
  9. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    _DEN_ неа не эта, инлайн из intsafe.h

    #define DWordToPtrdiffT ULongToIntPtr

    __inline
    HRESULT
    ULongToIntPtr(
    __in ULONG ulOperand,
    __out INT_PTR* piResult)
    {
    *piResult = (INT_PTR)ulOperand;
    return S_OK;
    }
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Дык один хрен на этом C4312 будет.
     
  11. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    неа, не будет почему-то
    код такой:
    Код (Text):
    1. ptrdiff_t lpBase;
    2. DWORD temp;
    3. temp = 0;
    4. DWordToPtrdiffT(temp, &lpBase)