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

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

04.12.2014, 15:43. Показов 1190. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru