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

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 5 мар 2007.

  1. nitrotoluol

    nitrotoluol New Member

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

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

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    pa=GetProcAddress(hLib,(char*)1);
     
  3. nitrotoluol

    nitrotoluol New Member

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

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    есть масса путей)) ну например
    Код (Text):
    1. PCHAR x = (PCHAR) pa;
    2. ну а дальше x[0] первый байт, x[1] второй ...
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нафиг лишние переменные плодить.
    ((BYTE*)pa)[0],
    ((BYTE*)pa)[1],
    ((BYTE*)pa)[2], ...

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

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

    _DEN_ DEN

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

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

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

    :derisive:
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    я привел код на Си.
    в С++ можно и static_cast юзать, только смысл?
     
  8. _DEN_

    _DEN_ DEN

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

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    когда я пишу программу сугубо для компилятора MS VC++ для платформы intel x86, меня как-то другое не особо волнует ;)
     
  10. _DEN_

    _DEN_ DEN

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

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

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну это понятно. Только если ты пишешь на си, такие привычки ни к чему, поскольку, насколько я помню, там такого вообще нету. А конкретный язык топикстартером не указывался. Вообщем, конечно, это нужно ставить, но иногда это излишне =)

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