С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для galaid
289 / 34 / 6
Регистрация: 20.09.2011
Сообщений: 464

Использование функций из Dll-библиотеки

04.12.2014, 15:43. Показов 1175. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал тестовую Dll-библиотеку.
После подключения ее к проекту не получается найти адрес функции в ней.

В комментариях указаны значения переменных при пошаговом выполнении. Стоит отметить, что DllLibrary получает адрес библиотеки.
C++
1
2
3
4
HMODULE DllLibrary = LoadLibrary(TEXT("../HookDll/Debug/HookDll.dll"));
int a = GetLastError(); // = 0
HOOKPROC HookProc = (HOOKPROC)GetProcAddress(DllLibrary, "LetterList");
int b = GetLastError(); // = 127
Сама библиотека:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
 
extern "C++" __declspec(dllexport) void LetterList()
{
    std::cout << "This function was called from LetterList() " << std::endl;
}
 
BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


Не подскажите, в чем может быть проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2014, 15:43
Ответы с готовыми решениями:

Экспорт функций с DLL библиотеки
У меня проблема с экспортом. Выдает ошибку Вот части исходников( я не буду полностью вставлять, так как смысл не в этом): ...

Сборка DLL библиотеки
#include &quot;stdafx.h&quot; #include &lt;Magick++.h&gt; #include &lt;iostream&gt; using namespace std; using namespace Magick; #pragma comment...

Подвязка к dll библиотеки
Всем добрый вечер! помогите пож. понять. Суть проблемы в том, что я не знаю как правильно подвязать dll, к проге, нашла много материала,...

7
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.12.2014, 16:17
Может extern "C"?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
04.12.2014, 16:20
galaid, замени на extern "C". При получении адреса функции нужно будет добавить подчеркивание _ перед именем ("_LetterList"). Читай тут и тут.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.12.2014, 16:33
Зачем подчёркивание? В примерах MSDN его нет.
И cout не надо в DLL использовать.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.12.2014, 17:20
galaid, надо не GetLastError проверять, а то, что возвращают функции.
И уж потом, если ошибка, смотреть GetLastError.
0
 Аватар для galaid
289 / 34 / 6
Регистрация: 20.09.2011
Сообщений: 464
04.12.2014, 17:26  [ТС]
Всем спасибо. Получилось.
Цитата Сообщение от nmcf Посмотреть сообщение
И cout не надо в DLL использовать.
Цитата Сообщение от Убежденный Посмотреть сообщение
galaid, надо не GetLastError проверять, а то, что возвращают функции.
И уж потом, если ошибка, смотреть GetLastError.
Это все понятно. Просто тестовый пример.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
04.12.2014, 18:33
C++
1
2
3
4
extern "C" __declspec(dllexport) void LetterList()
{
    std::cout << "This function was called from LetterList() " << std::endl;
}
Добавлено через 2 минуты
А еще скачать эту программу которой можно смотреть экспорт и импорт функций
http://www.dependencywalker.com/
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
06.12.2014, 20:18
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
#include "stdafx.h"
#include <iostream>
 
extern "C" __declspec(dllexport) void __stdcall LetterList()
{
    std::cout << "This function was called from LetterList() " << std::endl;
}
 
BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 
 
HMODULE DllLibrary = LoadLibrary(TEXT("../HookDll/Debug/HookDll.dll"));
int a = GetLastError(); // = 0
HOOKPROC HookProc = (HOOKPROC)GetProcAddress(DllLibrary, "_LetterList@0");
int b = GetLastError(); // = 127
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2014, 20:18
Помогаю со студенческими работами здесь

Использование функций сторонней библиотеки из c++ dll
Какой аналог кода (C#): public static extern int Last(string instrument, double price, int size); для C++ библиотеки (dll)....

Использование dll библиотеки
Есть SAMPLE_W_1.dll ((библиотека классов NET)) которая будет использовать как внешняя ссылка : namespace SAMPLE_W_1 { public ...

Использование dll библиотеки
Есть билиотека dll. В ней должны быть две функции/процедуры(этот момент не ясен, также как и то, на чем писалась эта библиотека....

Использование функций DLL из другой DLL
Ребята подскажите имеется hscli.DLL hscli.LIB и hscli.H , собираю свою DLL-ку , которая использует функции hscli.DLL мои...

Использование библиотеки avcodec.dll
Подскажите возможно ли использовать в Builder'e библиотеку avcodec.dll, которая требует stdint.h inttypes.h, которые не компилятся в ней и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru