Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240

В чем причина ошибки при получении адреса функции из dll с помощью функции GetProcAddress?

05.02.2016, 15:06. Показов 4715. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.Не могу получить адрес функции из dll с помощью функции GetProcAddress.
dll:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<windows.h>
HHOOK _hook;
int code;
bool key;
UINT scancode;
WPARAM wPararam;
LRESULT CALLBACK KeyProc(int ncode,WPARAM wParam,LPARAM lParam){
    KBDLLHOOKSTRUCT * pStruct = (KBDLLHOOKSTRUCT *)lParam;
    code=pStruct->vkCode;scancode=pStruct->scanCode;
    wPararam=wParam;
    if(wParam==WM_KEYUP){key=false;code=0;}else{key=true;}
    return CallNextHookEx(_hook,ncode,wParam,lParam);
}
осн.прога:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<windows.h>
#include<iostream>
#include"hook.h"
using namespace std;
int main(){
int (*func)();
FUNC func;
MSG msg;
HINSTANCE hinstDLL;
hinstDLL=LoadLibrary("dll.dll");
 (FARPROC &)func=GetProcAddress(hinstDLL,"KeyProc");
_hook = SetWindowsHookEx(WH_KEYBOARD,0,hinstDLL,func);
while(1){
PeekMessage(&msg,NULL,0,0,0);   
}
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.02.2016, 15:06
Ответы с готовыми решениями:

Неправильная работа функции @attachmentnames... в чем причина?
В документе в трех richtext полях хранится 10 файлов. Для 6 функция возвращает правильные названия, а для 4 - левые... В RT полях файлы...

Изучаю функции. Значение (max и min) не меняется, в чем причина?
#include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include&lt;stdio.h&gt; using namespace std; void CoutArray(int M, int strok,...

Получение адреса функции из .dll
Есть некоторая библиотека RSA_DLL.dll. Она в какой-то программе динамически подгружается. Так вот, как можно получить адрес функции...

54
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 13:32
Студворк — интернет-сервис помощи студентам
Что это?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<windows.h>
#include<iostream>
 
extern "C" {
 
HHOOK _hook;
__declspec(dllexport) LRESULT CALLBACK KeyProc(int ncode,WPARAM wParam,LPARAM lParam){
    std::cout<<"123";
    return CallNextHookEx(_hook,ncode,wParam,lParam);
}
 
}
0
07.02.2016, 14:58

Не по теме:

castaway, это dll у него такая. С функой по имени _KeyProc@12.

0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 15:00  [ТС]
или так:dll.rar
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 15:06
Digit@ll, там даже так: _Z7KeyProcijl@12
0
07.02.2016, 15:09

Не по теме:

Та да, даже так. :)

0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 15:10  [ТС]
если честно я не понял о чём вы
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 15:14
Amir_05_05, В чем причина ошибки при получении адреса функции из dll с помощью функции GetProcAddress?
Пробовал?
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 15:18  [ТС]
а почему так криво скомпилировал?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 15:23
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
а почему так криво скомпилировал?
Это не криво, это нормально. Так в C++ декорируются имена.
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 15:25  [ТС]
Цитата Сообщение от Digit@ll Посмотреть сообщение
castaway, это dll у него такая. С функой по имени _KeyProc@12
Цитата Сообщение от castaway Посмотреть сообщение
Digit@ll, там даже так: _Z7KeyProcijl@12
ну а что не так тогда?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 15:34
Цитата Сообщение от castaway Посмотреть сообщение
Amir_05_05, В чем причина ошибки при получении адреса функции из dll с помощью функции GetProcAddress?
Пробовал?
Я ответа дождусь или нет?
В чем причина ошибки при получении адреса функции из dll с помощью функции GetProcAddress? - пробовали так?
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 15:38  [ТС]
проверил,результат тот же
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 15:44
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
проверил,результат тот же
Выложи новую библиотеку.
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 15:51  [ТС]
dll.rar
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 15:55
Попробуйте использовать имя KeyProc@12 в GetProcAddress.
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 18:01  [ТС]
ошибка 127 исчезла,но выводит 1.
вот код main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<windows.h>
#include<iostream>
using namespace std;
int main(){
    HHOOK _hook;
    int ncode;
    WPARAM wParam;
    LPARAM lParam;
MSG msg;
HINSTANCE hinstDLL=LoadLibrary("dll.dll");
 HOOKPROC func=(HOOKPROC)GetProcAddress(hinstDLL,"KeyProc@12");
 if (!func) {
        cout << "GetProcAddress failed, last error: " << GetLastError() << endl;
    }
cout<<func;
_hook = SetWindowsHookEx(WH_KEYBOARD,func,hinstDLL,0);
while(1){
GetMessage(&msg,NULL,0,0);
}
    }
Добавлено через 1 час 45 минут
Цитата Сообщение от castaway Посмотреть сообщение
Попробуйте использовать имя KeyProc@12 в GetProcAddress.
теперь надо постоянно открывать dll и смотреть имя функции?А нет другого выхода?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.02.2016, 18:07
Можно поубирать __declspec(dllexport) и сделать экспорт функции через DEF-файл.
Тогда оно гарантированно будет таким же, как и в исходнике.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.02.2016, 18:09
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
А нет другого выхода?
__declspec(dllexport) LRESULT __cdecl CALLBACK KeyProc( ...
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
07.02.2016, 18:09  [ТС]
а при компиляции всего проекта этот def файл нужно таскать с собой или он используется один раз?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.02.2016, 18:17
DEF-файл используется только во время сборки.

Добавлено через 49 секунд
Цитата Сообщение от castaway Посмотреть сообщение
__declspec(dllexport) LRESULT __cdecl CALLBACK KeyProc
Это не будет работать.
Здесь же смешивание cdecl и stdcall (CALLBACK = stdcall).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2016, 18:17

Задача: подмена адреса функции из DLL.
Здравствуйте уважаемые программисты. Пожалуйста, помогите решить задачу. Нужно в моей программе подменить адрес функции причём из длл, во...

C2912: специализация функции не является специализацией какого-то конкретного шаблона (в чём причина ошибки?)
Есть шаблонная функция, а есть её конкретная специализация для типа имени структуры box. Почему-то отказывается работать, ссылаясь на...

Ошибка при получении результата функции
Всем привет. Есть функция ORACLE, которая возвращает данные из таблицы: FUNCTION retrieve_all RETURN table_type IS ...

Ошибка при получении результата из функции
Здравствуйте, помогите разобраться с функцией. При одном запросе на кнопку она выполняется, я получаю результат, а при работу через таймер...

Перехват функции - GetProcAddress
Здравствуйте. Покажите пожалуйста пример, как перехватит в dll &quot;A&quot; , функцию из dll &quot;Б&quot; В интернете только базовые примеры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru