Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227

GetProcAddress не находит функцию в dll

16.03.2021, 00:06. Показов 3403. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникает проблема при вызове функций в С++ файле из dll.

Сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <windows.h>
#include <iostream>
 
using namespace std;
 
 
class Connector {
 
    private:
        LPCSTR dll_name = (LPCSTR)"XLibDll.dll";
        HMODULE dll_pointer = NULL;
 
        // указатели на вызываемые из dll функции
        typedef uint32_t (_stdcall x_gle)();
 
 
        HMODULE get_dll_pointer() {
            // получаем указатель на динамическую библиотеку
            HINSTANCE hModule=::LoadLibrary(dll_name);
            // GetLastError() - возвращает код ошибки WinAPI
            int err = GetLastError();
            cout << err << endl;
            return hModule; 
        }
 
    public:
 
        int set_dll_pointer_var() {
            HMODULE dll_pointer = get_dll_pointer();
            if(dll_pointer!=NULL) {
                cout << dll_pointer << endl;
                ::FreeLibrary(dll_pointer);
            }
            else {
                cout << "DLL not found." << endl;
            }
            return 1;
        }
 
        void get_last_error() {
            // вызывает XCommand::GetLastError()
            x_gle* pointer = (x_gle*) ::GetProcAddress(dll_pointer, "?GetLastError@XCommand@@QEAAIXZ");
            int error = GetLastError();
            cout << error << endl;
        }
};
 
 
int main() {
    Connector connector;
    connector.set_dll_pointer_var();
    connector.get_last_error();
}
GetLastError() в Connector::get_last_error() возвращает 127 ошибку, т.е. не находит необходимой функции. Название функции взял из дампа dumpbin. В dll соответственно все написано через классы.
Подскажите, что может быть не так?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2021, 00:06
Ответы с готовыми решениями:

GetProcAddress не может найти функцию в dll
Хочу сделать глобальный хук клавиатуры. Сделал отдельный DLL со всем, что мне надо. Подрубаю DLL в программу через LoadLibrary(), все...

GetProcAddress не может получить адрес ф-ии из dll
Осваиваю написание dll, GetProcAddress не может получить адрес ф-ии из моей dllки? Где может быть засада? В экспоре ф-я вроде должна быть…...

Загрузка переменной из DLL (GetProcAddress не берет значение переменной из *.dll)
GetProcAddress не берет значение переменной из *.dll Не могу понять почему. Помогите. ------------------------- *********** ...

10
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
16.03.2021, 00:36
Dancing_god, а функция эта экспортируется из DLL?
0
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
16.03.2021, 01:32  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
а функция эта экспортируется из DLL?
Название функции взял из вывода команды
Code
1
dumpbin /EXPORTS XLibDLL.dll
Поэтому должна. Если что, возможности изменить исходники нет, из-за их отсутствия. Поэтому там формат наименования экспортируемых функций не поменять.
0
Злостный нарушитель
 Аватар для Verevkin
10283 / 5707 / 1267
Регистрация: 12.03.2015
Сообщений: 26,435
16.03.2021, 01:41
Дай файл.
0
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
16.03.2021, 01:49  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Дай файл.
Пожалуйста.
Вложения
Тип файла: rar xlib.rar (73.5 Кб, 7 просмотров)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12933 / 6801 / 1820
Регистрация: 18.10.2014
Сообщений: 17,213
16.03.2021, 02:02
Лучший ответ Сообщение было отмечено Dancing_god как решение

Решение

Цитата Сообщение от Dancing_god Посмотреть сообщение
C++
1
x_gle* pointer = (x_gle*) ::GetProcAddress(dll_pointer, "?GetLastError@XCommand@@QEAAIXZ");
А как это должно работать? В это месте dll_pointer всегда NULL. Вы никогда не назначаете ему никакого ненулевого значения.

Потому и GetProcAddress не работает.

Добавлено через 4 минуты
Также не ясно почему здесь

C++
1
HINSTANCE hModule=::LoadLibrary(dll_name);
вдруг использован тип HINSTANCE, а не HMODULE.
1
Злостный нарушитель
 Аватар для Verevkin
10283 / 5707 / 1267
Регистрация: 12.03.2015
Сообщений: 26,435
16.03.2021, 02:15
Цитата Сообщение от Dancing_god Посмотреть сообщение
Пожалуйста.
Спать пора мне... Посмотри, это вот мануал.
Экспортируемых функций дохренища.

Вложения
Тип файла: zip cast (7).zip (2.17 Мб, 109 просмотров)
0
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
16.03.2021, 02:39  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А как это должно работать?
Да, согласен, проглядел. Теперь работает. Правда указатель на функцию из dll, равный "1" - это нормально?

Добавлено через 3 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
вдруг использован тип HINSTANCE, а не HMODULE.
Так было в некоторых мануалах по работе с dll. Но я так понял, это typedef-ы на один и тот же тип данных.

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Спать пора мне... Посмотри, это вот мануал.
Спасибо, но он у меня есть.
Исходников вот нет, поэтому надо будет еще разбираться с вызовом dll через wine. Буду надеяться, что так можно.

Добавлено через 16 минут
Цитата Сообщение от Verevkin Посмотреть сообщение
Экспортируемых функций дохренища.
К слову, а какой есть вариант понять, какое имя функции в dll какой сигнатуре соответствует? А то много вариантов одной и той же функции с разными параметрами.
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
16.03.2021, 11:05
Цитата Сообщение от Dancing_god Посмотреть сообщение
Правда указатель на функцию из dll, равный "1" - это нормально?
Это не указатель равен 1, а указатель приведенный к bool выведен как 1(true) .

Добавлено через 52 секунды
Цитата Сообщение от Dancing_god Посмотреть сообщение
К слову, а какой есть вариант понять, какое имя функции в dll какой сигнатуре соответствует?
https://en.wikiversity.org/wik... e_mangling
1
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
16.03.2021, 12:02  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Это не указатель равен 1, а указатель приведенный к bool выведен как 1(true) .
Понял. Значит все нормально.

Добавлено через 19 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
https://en.wikiversity.org/wik... e_mangling
Спасибо за ссылку.
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
16.03.2021, 12:08
Dancing_god, есть утилита - undname, которая переводит декорированные имена в недекорированные.
https://docs.microsoft.com/ru-... w=msvc-160
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2021, 12:08
Помогаю со студенческими работами здесь

LoadLibrary, GetProcAddress: как правильно подгружать функцию из библиотеки?
Подскажите пожалуйста, как правильно подгружать функцию из библиотеки? пытаюсь так, не получается... auto lib =...

В чем причина ошибки при получении адреса функции из dll с помощью функции GetProcAddress?
Здравствуйте.Не могу получить адрес функции из dll с помощью функции GetProcAddress. dll: #include&lt;windows.h&gt; HHOOK _hook; ...

Вызов getprocaddress в сервисе. не работает вызов dll
всем здравия желаю! есть программа. она выполняет getprocaddress и вызывает полученную функцию — без проблем. делаю то же самое в...

не находит фу-ю в dll
объявление в dll // dllmain.cpp : Defines the entry point for the DLL application. #include &quot;pch.h&quot; #include &lt;Windows.h&gt; #include...

Не находит какую то dll
........................................


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru