Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320

Как создать DLL в VS2010 C++ Динамически подключаемую?

13.04.2012, 21:56. Показов 3827. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите кто знает пробовал тут сам зделать не получилось
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2012, 21:56
Ответы с готовыми решениями:

Как создать dll на VS2010?
Добрый день! Уважаемые спец. помогите горю, леплю dll на VS2010 prof.rus для VB6 /

как фрейм поместить в dll динамически подключаемую
как фрейм поместить в dll динамически подключаемую, на которой будут эл. упр.

Как сделать свой интрепретатор C# или подключаемую из интерфейса DLL ?
Возможно я не совсем правильно обозвал эту тему, но смысл следующий. Есть программа работающая с сервером, получает и обрабатывает от...

9
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
13.04.2012, 21:59
а документацию кто будет читать????
http://msdn.microsoft.com/ru-r... 35636.aspx
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
13.04.2012, 22:08  [ТС]
Цитата Сообщение от panicwassano Посмотреть сообщение
а документацию кто будет читать????
http://msdn.microsoft.com/ru-r... 35636.aspx
а да я это читал но у меня не работает в код:

C
1
2
3
 //в заголовочном файле обьявил:
 
_declspec(dllexport) int  R11(int, int);
в основном файле:

C
1
2
3
4
int R11(int x, int y)
{
    return x + y;
};
потом создал консульное приложение и попытался вызвать функцию с таким кодом:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef int (*PAVEL)(int, int);
int _tmain(int argc, _TCHAR* argv[])
{
    //int s = R11(1, 2);
    HINSTANCE hDLL;
    PAVEL* pFUNCTION;
    
    hDLL = LoadLibraryA("mydll.dll");
    
    if (hDLL != NULL)
    {
        pFUNCTION = (PAVEL*) GetProcAddress(hDLL, "R11");
    }
 
        int d = (*pFUNCTION)(1, 2);
    
 
    FreeLibrary(hDLL);
     
    return 0;
}

я больше не чего не делал ну разве что dll кинул в папку с основной прогой и все! Короче весь коды вылетает на функции поления адрес о функции r11 которая в dll как будто ее там нет значение = NULL выходит
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
14.04.2012, 02:04
У вашей созданной dll ки должно быть два файла .lib и .dll
Насколько я помню их нужно кинуть к проекту, далее в проекте нужно подключить либу так:
- #pragma comment(lib, "libname.lib");
- в основной программе описать прототипы нужных функции из созданной либы со спецификатором _declspec(dllimport)
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
15.04.2012, 19:55  [ТС]
Цитата Сообщение от Whiteha Посмотреть сообщение
У вашей созданной dll ки должно быть два файла .lib и .dll
Насколько я помню их нужно кинуть к проекту, далее в проекте нужно подключить либу так:
- #pragma comment(lib, "libname.lib");
- в основной программе описать прототипы нужных функции из созданной либы со спецификатором _declspec(dllimport)
я с этим вроед разобрался а вот динамическое подключение не как не идет
0
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
16.04.2012, 06:12
Цитата Сообщение от Whiteha Посмотреть сообщение
У вашей созданной dll ки должно быть два файла .lib и .dll
Достаточно только .dll.
Без .lib можно. Однако для того чтобы использовать нужную функцию придется ухитряться. Собственно вот примерчик:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
#include <stdio.h>
 
typedef double (*rtcdouble)(double);
 
int main()
{
    HMODULE hModule;
    rtcdouble rtcSin;
    double result;
    
    printf("rtcSin Example\n\n");
 
    hModule=LoadLibrary("msvbvm60.dll");
    rtcSin=(rtcdouble)GetProcAddress(hModule,"rtcSin");
 
    result=rtcSin(1.57);
    printf("Sin(pi/2)=%lf\n", result);
 
    return 0;
}
Добавлено через 19 минут
Цитата Сообщение от n971030 Посмотреть сообщение
в основном файле:
Попробуйте так:
C
1
2
3
4
_declspec(dllexport)  int R11(int x, int y)
{
    return x + y;
}
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
16.04.2012, 16:05  [ТС]
Цитата Сообщение от Евгений М. Посмотреть сообщение
[/C]
Добрый вечер еще раз - попробовал по вашему совету не работает и так и сяк, остановился на этом варианте толку нету в чем дело?

C++
1
2
3
4
5
6
7
8
9
10
11
12
  //DLL
 
// mydll.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
#include <windows.h>
 
_declspec(dllexport) int r11(int x, int y)
{
    return x + y;
}

//ФАЙЛ *EXE*

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
// myexe.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
 
typedef int (*Ссылка)(int, int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    HMODULE hANDL;  
    Ссылка Адрес;
    hANDL = LoadLibraryA("mydll.dll");
    if (hANDL == NULL) 
      return 1; 
 
 
 
    Адрес = (Ссылка) GetProcAddress(hANDL, "r11"); 
    
    if(Адрес == NULL)
        return 1;
 
    int k = Адрес(2, 3);
 
    //printf("Результат данных: " + (char) k);
     
 
    return 0;
}
Ошибка происходит в строке: ... GetProcAddress ....
0
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
16.04.2012, 16:41
Цитата Сообщение от n971030 Посмотреть сообщение
_declspec(dllexport) int r11(int x, int y) { return x + y; }
попробуйте так

C++
1
2
3
4
5
6
7
extern "C"
{
_declspec(dllexport) int r11(int x, int y)
{
    return x + y;
}
}
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
17.04.2012, 20:31  [ТС]
Цитата Сообщение от DeadRipper Посмотреть сообщение
попробуйте так

C++
1
2
3
4
5
6
7
extern "C"
{
_declspec(dllexport) int r11(int x, int y)
{
    return x + y;
}
}
Это помогло!! но теперь другая проблемма: я там маленько код подредактировал:

ФАЙЛ DLL
C
1
2
3
4
5
6
7
8
9
10
11
// mydll.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
#include <windows.h>
 
extern "C"
_declspec(dllexport) int r11(int x, int y)
{
    return x + y;
}
фАЙЛ *.EXE*

Изменение в строке: typedef int (WINAPI *Ссылка)(int, int);

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
// myexe.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
 
typedef int (WINAPI *Ссылка)(int, int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    HMODULE hANDL;  
    Ссылка Адрес;
    hANDL = LoadLibraryA("mydll.dll");
    if (hANDL == NULL) 
    {
      return 1; 
    }
 
 
 
    Адрес = (Ссылка) GetProcAddress(hANDL, "r11"); 
    
    if(Адрес == NULL)
        return 1;
 
    int k = Адрес(2, 3);
 
    //printf("Результат данных: " + (char) k);
     
 
    return 0;
}
после внесеных изменений у меня вылетать стало в строке:
int k = Адрес(2, 3); по сути вроде все правильно сделано а в чем причина не понятно
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
19.04.2012, 22:28  [ТС]
Цитата Сообщение от n971030 Посмотреть сообщение
Это помогло!! но теперь другая проблемма: я там маленько код подредактировал:

ФАЙЛ DLL
C
1
2
3
4
5
6
7
8
9
10
11
// mydll.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
#include <windows.h>
 
extern "C"
_declspec(dllexport) int r11(int x, int y)
{
    return x + y;
}
фАЙЛ *.EXE*

Изменение в строке: typedef int (WINAPI *Ссылка)(int, int);

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
// myexe.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
 
typedef int (WINAPI *Ссылка)(int, int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    HMODULE hANDL;  
    Ссылка Адрес;
    hANDL = LoadLibraryA("mydll.dll");
    if (hANDL == NULL) 
    {
      return 1; 
    }
 
 
 
    Адрес = (Ссылка) GetProcAddress(hANDL, "r11"); 
    
    if(Адрес == NULL)
        return 1;
 
    int k = Адрес(2, 3);
 
    //printf("Результат данных: " + (char) k);
     
 
    return 0;
}
после внесеных изменений у меня вылетать стало в строке:
int k = Адрес(2, 3); по сути вроде все правильно сделано а в чем причина не понятно
Помогите разобраться не понимаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2012, 22:28
Помогаю со студенческими работами здесь

Как динамически создать массив из динамически конструируемых экземпляров класса?
Есть два класса.Подразумевается ,что первый в конструкторе выделяет интовый массив длинной n,второй выделяет массив экземпляров первого...

Как динамически подключить dll?
Здравствуйте, какие способы подключить динамически dll существуют?(masm) кроме стандартного способа LoadLibrary,GetProcAddress,Call. ...

Как подключить dll динамически?
Допустим, есть программа на c# и к ней dll тоже на c#. Обе писал я. Пусть в папке Program лежит exe программы. А dll лежит в Program/bin к...

Как динамически подключить DLL
Подскажите, как подключить динамически DLL, которая написана на C/C++?

Как создать подключение к базам данных (VS2010)?
Всем привет, программисти!:) Очень раз общению на этом форуме!:) Дело в том что у меня не получаеться подключить базу данных mdf.......


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru