Прототип функции есть а stub (переходника) функциИ нет. Такое бывает?

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

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    То есть в среде программирования MASM32 в подключаемом инклуде Imagehlp.inc
    Есть прототип функции CheckSumMappedFile, вот он
    CheckSumMappedFile PROTO :lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD
    (Это функция для подсчёта чек суммы PE-файла)

    Пишу так
    include C:\masm32\include\Imagehlp.inc
    Нормально всё пока..Ага, теперь надо и переходник для этой функции написать. Вот здесь
    От зелёного к красному, часть вторая сказано, что "Эта функция доступна из библиотеки imagehlp.dll"

    А у меня доступа к этой библиотеке нет, вот в чём загвоздка. Строка
    includelib C:\masm32\lib\ imagehlp.lib
    Ничего не даёт.

    На всякий случай, поискал через поиск по компьютеру файл imagehlp.lib- нету. А такое вот подсоединение через одно место
    includelib C:\WINDOWS\system32\Imagehlp.dll
    Вызывает у компьютера смех и предупреждение, что неизвестный формат файла и он будет проигнорирован
    Среда программирования солидная вроде, скачал с этого сайта.

    Хочется спросить вас, друзья, где же взять такой переходник и часта ли такая ситуация, когда что-то должно быть, но его нет. Это, может, обыкновенная рабочая ситуация для программистов, но я ещё впадаю в панику от подобного. Ладно бы, прототипа не было! А то же он есть, а переходника нет. Очено странно, и мне кажется, я чего-то не так делаю.

    Спасибо заранее.
     
  2. HuXTUS

    HuXTUS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    240
    У меня в новом MASM'е тоже не оказалось IMAGEHLP.LIB. В старом нашел.
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Спасибо. Google почему-то выдаёт на один IMAGEHLP.LIB десять IMAGEHLP.dll Можно подумать, вторая без первого чего-то стоит.
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    А знаешь, второе без первого стоит очень много, а вот первое это туфта. Учись писать без припонов языка и узнаешь чего стоит второе без первого! К тому же есть программы (из комплектов MASM и TASM), которые из второго делают первое. Извини, но просто я над этим утверждением ржу до сих пор!
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Я имел ввиду, что вызвать нужную функцию без переходника никак.
     
  6. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    GetProcAddress не пробовали?? :)
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    amvoz
    учите матчасть
    привел бы пример как найти функции LoadLibrary и GetProcAddress без всего (а GetProcAddress даже и переписать), но его слишком долго печатать, так что поверь на слово, что можно...
    ассемблер...
    Код (Text):
    1. push offset dll_file_name
    2. call LoadLibrary
    3. test eax, eax
    4. jz error; не найдена библиотека DLL
    5. push offset func_name
    6. push eax
    7. call GetProcAddess
    8. test eax, eax
    9. jz error; в библиотеке нет такой функции
    10. ;может быть необходимо задать параметры, а может и не надо
    11. call eax
    C (естественно под Windows, для DOS'а PE загрузчик пиши сам)...
    Код (Text):
    1. #include <windows.h>
    2. ...
    3. #typedef <возвращаемый тип> (WINAPI *_<имя функции>)(<параметры функции>);
    4. ...
    5. _<имя функции> <имя функции> = (_<имя функции>)GetProcAddress(LoadLibrary("<имя dll>.dll"), "<имя функции>");
    6. ...
    7. x = <имя функции>(<параметры функции>);
    Delphi
    либо
    Код (Text):
    1. uses
    2.   Windows;
    3. ...
    4. type
    5.   T<имя функции> = function (<параметры функции>):<возвращаемый тип>;
    6. ...
    7.   x:=T<имя функции>(GetProcAddress(LoadLibrary('<имя dll>.dll'), '<имя функции>'))(<параметры функции>);
    или
    Код (Text):
    1. uses
    2.   Windows;
    3. ...
    4. var
    5.   <имя функции>:function (<параметры функции>):<возвращаемый тип>;
    6. ...
    7.   <имя функции>:=GetProcAddress(LoadLibrary('<имя dll>.dll'), '<имя функции>');
    8.   x:=<имя функции>(<параметры функции>);
    если надо подробнее - пиши в личку.
    оффтоп. блин. прерывание раньше сработало. ;)