GetProcAddress некорректно работает!

Discussion in 'LANGS.C' started by nitrotoluol, Mar 5, 2007.

  1. nitrotoluol

    nitrotoluol New Member

    Blog Posts:
    0
    Joined:
    Sep 5, 2006
    Messages:
    848
    Точнее компилятор не сильно дружит с этой апишкой.
    Мне нужно получить АПИ по ординалу. Я ставлю
    pa=GetProcAddress(hLib,1);

    А он говорит, что должен быть указатель на строку с именем функции, а не 1. Что делать? Конечно можно без труда вставить асм-код, но по моему это не вариант... :)
     
  2. Quantum

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

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    pa=GetProcAddress(hLib,(char*)1);
     
  3. nitrotoluol

    nitrotoluol New Member

    Blog Posts:
    0
    Joined:
    Sep 5, 2006
    Messages:
    848
    Quantum
    Ого...заработало... респектище...
    Еще вопрос в догонку.. Как по адресу pa прочитать несколько байт (ну для начала хотя бы 1 байт)
     
  4. agent007

    agent007 New Member

    Blog Posts:
    0
    Joined:
    Feb 3, 2007
    Messages:
    166
    есть масса путей)) ну например
    Code (Text):
    1. PCHAR x = (PCHAR) pa;
    2. ну а дальше x[0] первый байт, x[1] второй ...
     
  5. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    нафиг лишние переменные плодить.
    ((BYTE*)pa)[0],
    ((BYTE*)pa)[1],
    ((BYTE*)pa)[2], ...

    Можно сразу словами и даже двойными словами (вместо BYTE написать WORD или DWORD).

    Чувак, почитай в учебнике преобразование типов ;)
     
  6. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    Great

    Если бы ты читал про преобразования типов, ты бы посоветовал

    (static_cast<const BYTE*>(static_cast<const void*>(pa)))[0]

    :derisive:
     
  7. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    я привел код на Си.
    в С++ можно и static_cast юзать, только смысл?
     
  8. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    Great

    Смысл - глубочайший :derisive: Приводить один указатель к другому можно только двумя static_cast через void*. Иначе нет гарантии что все скастуется правильно. На большинстве систем конечно и галимый c-cast сработает, но стандарт ничего не гарантирует ;)
     
  9. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    когда я пишу программу сугубо для компилятора MS VC++ для платформы intel x86, меня как-то другое не особо волнует ;)
     
  10. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    Great

    Ну когда я катаюсь по родной деревне на машине, меня тоже мало интересует есть ли у меня аптечка, огнетушитель, трезв ли я и показываю ли поворотники))

    Скажем так: static_cast - хорошая привычка.
     
  11. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Ну это понятно. Только если ты пишешь на си, такие привычки ни к чему, поскольку, насколько я помню, там такого вообще нету. А конкретный язык топикстартером не указывался. Вообщем, конечно, это нужно ставить, но иногда это излишне =)

    ЗЫ. Ну раз у него были проблемы с кастом INT на CHAR*, то скорее всего это с++ :)