powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Извлечение адреса процедуры из DLL
15 сообщений из 15, страница 1 из 1
Извлечение адреса процедуры из DLL
    #38172302
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Баблиотека загружается, но адрес функции получить не могу, GetLastError - ошибка 127 (процедура не найдена).
Скажите, пожалуйста, что не так.

Код dlllib.dll

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#include "stdafx.h"

extern "C" __declspec(dllexport) 
LRESULT CALLBACK hProc(int i) 
{ 
	return FALSE;
}



Код 123.срр

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <Windows.h>

void main()
{
    HMODULE hLib = LoadLibrary(L"dlllib");
    FARPROC c=GetProcAddress(hLib, "hProc");
    FreeLibrary((HMODULE)hLib);
}
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172308
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_kip,

Насколько я помню, в VS функции C++ объявленные как extern "C" + CALLBACK при отсутствии .DEF файла экспортируются с таким форматом имени:
_имя@число

где
_ - символ _
имя - имя функции в исходном коде
@ - символ @
число - общий размер аргументов функции в стеке (с учетом выравнивания в 4 байта для каждого аргумента - для 32-битных программ)

Таким образом для вашего случая экспортируемое имя будет таким: _hProc@4

Ну и с помощью .def можно задать любое имя.
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172319
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky, на @ пишет "нераспознанная лексема.
А что такое .def. Где можно про это почитать?
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172321
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_kipAnatoly Moskovsky, на @ пишет "нераспознанная лексема.
Какая еще лексема. Вы без кавычек что-ли имя в GetProcAddress передаете?
А что такое .def. Где можно про это почитать?
В гугле первая ссылка.
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172322
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, спасибо, работает. Где про def можно почитать?
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172323
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я просто ее пробовал так не экспортировать, а объявить в dll))))
Сейчас работает.
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172333
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНасколько я помню, в VS функции C++ объявленные как extern "C" + CALLBACK при отсутствии .DEF файла экспортируются с таким форматом имени:
_имя@число
extern "C" __declspec(dllexport) вроде как то что нужно топикстартеру экспортирует


в вот GetProcAddress ошибку 127 ещё даёт при hModule==0
Библиотека точно загрузилась?
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172334
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно загрузилась
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172336
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_kip,

утилиту dumpbin /exports рекомендую (чтоб посмотреть, что реально наэкспортилось)
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172338
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Я воспользовался совестом Александра и все заработало.
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172366
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_kip,

А что посоветовал Александр? :)
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172371
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
extern "C" __declspec(dllexport)
LRESULT CALLBACK hProc(int i)


Ты думаешь, функция так и называется, hProc ?
Ну-ну...

Вообще, функции из DLL могуть экспортироваться по имени и по номеру.
Если они по номеру идут, то так на шару загрузить библиотеку и подцепить функцию нельзя, нужно знать её номер.
Или использовать библиотеку импорта.
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172372
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо Александр был всё же Анатолием. Ну что ж, хорошо, что хорошо кончается.
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172389
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_kip,

CALLBACK - сознательный выбор или так скопипастилось?
...
Рейтинг: 0 / 0
Извлечение адреса процедуры из DLL
    #38172396
Alex_kip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, да, Анатолий.

Это упрощенный пример моей программы. Я хуки ставить учусь.
Все функции работали, кроме тех, которые с CALLBACK. Вот и написал по этому поводу.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Извлечение адреса процедуры из DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]