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

Создание и подключение DLL

22.08.2016, 00:31. Показов 3922. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый вечер, уважаемые форумчане,
Прошу помощи в коде создания и подключения DLL.

Вот код:
header DLL-файла sergei.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
__declspec (dllexport) int WINAPI Fun151(int, int);
 
__declspec (dllexport) float WINAPI Fun152 (int, int, int);
 
__declspec (dllexport) void WINAPI Fun153 (double in, double *out );
 
__declspec (dllexport) int g_nDllCallsCount; //счетчик вызовов библиотеки
 
__declspec (dllexport) int g_nFnCallsCount; // счетчик вызовов функции

dllmain.cpp:

Кликните здесь для просмотра всего текста
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
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
 
#include "sergei.h"
 
#pragma data_seg (".ASHARE")
__declspec (dllexport) int g_nDllCallsCount = 0;
 
#pragma data_seg()
 
#pragma comment(linker, "/SECTION:.ASHARE,RWS")
 
 
 
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        {
            MessageBox(NULL, TEXT("Загружается процесс библиотеки SERGEI_DLL.dll"), TEXT("Process Attach"), MB_OK|MB_ICONINFORMATION);
            g_nDllCallsCount++;
            
            break;
        }
    case DLL_THREAD_ATTACH:
        {
            MessageBox(NULL, TEXT("Загружается поток библиотеки SERGEI_DLL.dll"), MB_OK|MB_ICONINFORMATION);
            
            break;
        }
    case DLL_THREAD_DETACH:
        {
            break;
        }
    case DLL_PROCESS_DETACH:
        {
            break;
        }
        
    }
    return TRUE;
}


cpp-файл sergei_dll.cpp с функциями:

Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
 
#include "sergei_dll.h"
 
__declspec (dllexport) int g_nFnCallsCount = 0;
 
__declspec (dllexport) int WINAPI Fun151(int x, int y) 
{
    g_nFnCallsCount++;
    return x + y;
    
}
 
__declspec (dllexport) float WINAPI Fun152 (int x, int y, int z)
{
    g_nFnCallsCount++;
    return ((float) (x + y) * z);
    
}
 
__declspec (dllexport) void WINAPI Fun153 (double in, double * out )
{
    g_nFnCallsCount++;
    out = ∈
}



Пока проблема следующая: при Buildе выдаёт ошибку:
error C2086: 'int g_nFnCallsCount' : redefinition i:\sergei_dll\sergei_dll\sergei_dll.cpp,
ссылка на строку
Кликните здесь для просмотра всего текста
C++
1
__declspec (dllexport) int g_nFnCallsCount = 0;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.08.2016, 00:31
Ответы с готовыми решениями:

Создание и подключение своей dll
Доброго времени суток. Сделал библиотеку using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Создание своей dll и подключение её к проекту
Всем привет. Я создал небольшую dll буквально из нескольких функций, скомпелировал, получил .dll файл, но вот при попытке подключить его...

Динамическое подключение DLL, которая в свою очередь использует другие DLL
Здравствуйте! Направьте на путь истинный, как поступить след. образом: Пишу небольшое приложение, которое юзает стороннее DLL из...

3
Заблокирован
22.08.2016, 00:40
Одна и та же переменная определена в двух разных файлах. Зачем?
1
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 9
22.08.2016, 04:32  [ТС]
nimazzzy, большое человеческое подутреннее спасибо! Доступа к сайту не было отблагодарить раньше. Библиотека создаётся, что там куда и как экспортируется - после сна.
0
23 / 23 / 8
Регистрация: 03.12.2013
Сообщений: 202
22.08.2016, 21:28
Делал уроки, где рассмотрены все возможные ошибки подключения к 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//----------------------------------------------------------------------------------------------------------------------
//  Практика №2. Часть 1.                    " Создание и подключение dll библиотеки." 
//----------------------------------------------------------------------------------------------------------------------
 
#include "Init.h"
 
    
  
char strq[100] = "Начало строки...";    
                                       
HMODULE hDll;                                                                              // Дескриптор DLL-библиотеки
 
void (*dllHello) (char[]);                                                                      // Указатель на функцию
 
 
void INIT()
{                                                                                                                                                                                                                  
  hDll = LoadLibrary("dll_1.dll");                                     // Загружаем динамически подключаемую библиотеку       
  
  if(hDll)                                      // Если дескриптор DLL-библиотеки  "hDll" не равен нулю, то всё отлично
  {
    Print(76,  60, "Успешно подключили dll библиотеку"); 
  }
  else       //  Если равно нулю, то обратите внимание на правильность написания имени dll и её наличия в папке проекта
  {
    Print(76,  60, "Динамическую библиотеку не удалось загрузить :(");
    Print(76,  80, "Проверьте её название - dll_1.dll и наличие в папке проекта.");
    Timer_CLK = 100;// увеличиваем счётчик, что бы избежать дальнейшего обращения к функции в неподключенной библиотеке
  }
                                                                                            
                                                                                      
}
 
 
 
 
 
void START()
{   
  switch(Timer_CLK)
  {
                                                 //  Обратите внимание, что указатель на функцию может иметь другое имя
    case 10:  dllHello = (void (*)(char[]))GetProcAddress(hDll, "Hello_From_DLL");            // Получаем адрес функции  
              if(dllHello)
              { 
                  Print(76, 120,"Получили адрес функции !");    
              }
              else
              {
                Print(76, 120,"Ошибка получения адреса функции");
                Timer_CLK = 100;                                                                 // увеличиваем счётчик
              }         
              break; 
            
    case 20:  Print( 76, 140, "Содержимое char strq[100] = ...");  
              Print( 76, 160, "до вызова функции из DLL : "); 
              Print(276, 160, strq);
              break; 
              
    case 30:  dllHello(strq);                                                         // Вызываем функцию из библиотеки
              Print( 76, 180, "и после вызова функции из DLL : "); 
              Print(276, 180, strq);
              break; 
    
    case 40:  if(FreeLibrary(hDll))
              {
                 Print(76, 240,"Библиотека успешно выгружена из памяти");     
              }
              else
              {
                 Print(76, 240,"Ошибка выгрузки библиотеки из памяти");     
              }         
              break;
  }
    Print(17, 360,"Timer_CLK = ", Timer_CLK);  
}
Миниатюры
Создание и подключение DLL  
Вложения
Тип файла: rar Подключение_dll.rar (137.8 Кб, 46 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2016, 21:28
Помогаю со студенческими работами здесь

Подключение сторонней DLL. Нужно, чтобы программа могла работать с разными версиями dll
Есть dll с неким драйвером для фискального регистратора. Требуется прицепить ее к программе на C#. Проблема в том, что эти драйвера...

Подключение dll из ресурсов внутри другой dll
Здравствуйте! Есть сторонняя dll и собственная dll. Собственная dll написана для удобной работы со сторонней dll. Обе dll приходится...

Подключение библиотек libeay32.dll и ssleay32.dll
В общем написал програмку для отправки сообщений, но она не работает без 2х библиотек: libeay32.dll и ssleay32.dll. Я их скинул в папку с...

Патчинг dll - подключение своей dll
Здрасти, та среда где я нахожусь. Тут уже давным навно актуально что разные моды и протекты делаются для игры методом подключения своих DLL...

Создание .dll и присоеденение .dll к проекту путем непосредственного написания кода
Здравствуйте, дорогие форумчане! Я прекрасно знаю, как создавать и прикреплять к проекту .dll файлы при помощи опций компилятора в Visual...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru