Как переопределить тип переменной?

Тема в разделе "WASM.BEGINNERS", создана пользователем intel_x128, 19 сен 2009.

  1. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    Как переопределить тип переменной?

    Есть функция

    int _cdecl my_func(PVOID pBuffer)
    {
    PDWORD _pBuffer = (PDWORD)pBuffer; //вот так не годится. Т.к. нужна лишняя переменная.

    /*можно ли как-то внутри функции переопределить переменную pBuffer, чтобы обращаться к ней как к PDWORD ?

    */

    };
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    intel_x128
    без переходной переменной только если везде писать (PDWORD)pBuffer
     
  3. VictorV79

    VictorV79 New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2009
    Сообщения:
    130
    это наверно вообще не в тему

    PDWORD pdwSize,
    PDWORD pnProfiles

    pdwSize
    Указатель на переменную, содержащую размер буфера, указанный при помощи параметра pBuffer. По возвращению, *pdwSize содержит размер фактически используемого или необходимого буфера.

    pnProfiles
    Указатель на переменную, которая будет содержать, по возвращению, число имен профиля, фактически скопированных в буфер.

    ................

    type PDWord = ^DWord
     
  4. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    Я не уточнил наверное.
    Вопрос про чистый С. Компилятор MSVS 2008
     
  5. VictorV79

    VictorV79 New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2009
    Сообщения:
    130
    Может тут что то есть

    Win32 API
    Bool _PdFreeBuffer(PDWORD pBuffer, PDWORD pError);
    http://www.omega.com/manuals/manualpdf/M3833.pdf

    http://vx.netlux.org/lib/vbp01.html
     
  6. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Никак нельзя, но можно проверить после билда идой, и с большой вероятностью окажется что все оптимизировано и лишней переменной не будет =)
     
  7. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    это норм.
    бывает на входе handle а на самом деле указатель на огромных размеров структуру
     
  8. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    А так можно?
    Код (Text):
    1. #define _pBuffer ((PDWORD)pBuffer)
     
  9. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    JAPH
    Красивое решение!
     
  10. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    AsmGuru62
    для си++ это считается хаком, но думаю где это можно применить это не страшно :derisive:
     
  11. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    _pDword[1] - обращение к первому байту, а не дворду.
    Как решить эту проблему?

    Я ведь не просто так ее переопределяю. Мне нужно работать с этой переменной. :)
     
  12. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    _pBuffer т.е. (верните редактирование)
     
  13. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    А разве не обращение ко второму дворду?
    А если надо к первому байту, то зачем делать PDWORD?
     
  14. Dukales

    Dukales New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2009
    Сообщения:
    199
    JAPH
    настоящие программисты считают не "первый, второй, третий...", а "нулевой, первый, второй..." =)
     
  15. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    Нет.
    Обращение идет к первому байту. И адрес уже преопразуется к типу PDWORD
     
  16. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Ничего подобного.
    При #define _pBuffer ((PDWORD)pBuffer)
    _pBuffer[1] преобразуется к ((PDWORD)pBuffer)[1]
    Т.е. указатель приводится к типу укадатель на DWORD, и потом происходит чтение первого дворда.
    Если нужен первый байт - так и пиши: *((PBYTE)pBuffer+1)
    Ну или если так как раньше писали - то:
    Код (Text):
    1. #define _pBuffer ((PBYTE)pBuffer)
    2. _pBuffer[1];
     
  17. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    да, точно
    сказал, непроверив
    все работает
    спс :)