Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

Создание и использование динамических библиотек .dll в visual studio.

Posted on 8 декабря, 20138 декабря, 2013 by admin

Здорова господа!!!

Мы рассмотрим такой вид подключаемых библиотек таких как .dll это типо динамические библиотеки, если код из статических либ добавлялся в сам exe файл и после компиляции программы программа работала без этой библиотеки, то .dll нужно что бы был рядом с исполняемым файлом. Я сам недавно с ними познакомился и только знаю как их создавать и подключать. Считается вроде как эти либы типо как то экономят оперативную помять компьютера ну что то вроде этого, я читал так и не понял, ну это в принципе не сильно важно для новичков, а важно это как их создавать и как использовать.Ну ладно начнем потихоньку.

1. Создание библиотеки .dll

Открываем файл -> создать -> проект

img11

Открывается окно создать проект, выбираем консольное приложение win32, вводим название проекта я ввел MyNewDll и выбираем где будет сохранен проект и нажимаем кнопку Ок и мы попадаем в мастер приложенийimg13

Нажимаем Далее и открывается окно в котором выбираем «библиотека DLL» и ставим галочку «пустой проект»img14

Нажимаем готово, все проект для создания динамических библиотек создан. Дальше создаем заголовочный файл function.h в котором в самом начала файла прописываем следующий код это препроцесорные директивы

1
2
3
4
5
6
//function.h
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif

Без этого кода возможно не правильно будет создаваться, я не экспериментировал не знаю, это я прочитал в МСДН, а поэтому добавляйте обязательно, ну и дальше добавляем функции которые будут импортироваться из файла.

1
2
3
4
5
6
7
#ifndef FUNCTION_H
#define FUNCTION_H
 
MATHFUNCSDLL_API void func_hellow();
MATHFUNCSDLL_API void func_privet();
 
#endif

Ну и сам файл function.cpp добавляем в проект

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using std::cout;
using std::endl;
 
#include "function.h";
 
void func_hellow()
{
cout <<"Hellow world gacpada"<<endl;
}
 
void func_privet()
{
cout <<"privet eb tu bl9 mazafaka bich"<<endl;
}

Ну и все дальше нажимаем Shift+Alt+F7 и у нас создается .dll в папке дебаг или релиз смотря что вы выбрали, там будет несколько файлов, но нам нужны два файла один с расширением lib — это библиотека импорта, не путайте со статической библиотекой и с расширением .dll и сам заголовочный файл, но не тот что мы создали для проекта .dll а реальный от этот

1
2
3
4
5
6
7
#ifndef FUNCTION_H
#define FUNCTION_H
 
void func_hellow();
void func_privet();
 
#endif

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

function.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif
 
#ifndef FUNCTION_H
#define FUNCTION_H
 
class My_class
{
public:
MATHFUNCSDLL_API void func_hellow();
MATHFUNCSDLL_API void func_privet();
};
 
#endif

и файл function.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
 
#include "function.h";
 
void My_class::func_hellow()
{
cout <<"Hellow world gacpada"<<endl;
}
 
void My_class::func_privet()
{
cout <<"privet eb tu bl9 mazafaka bich"<<endl;
}

И все нормально создается.

2. Подключение dll.

Создаем новый проект в котором мы будем использовать нашу библиотеку, создаем файл main.cpp

1
2
3
4
5
6
7
8
9
10
#include "function.h"
 
int main()
{
My_class c;
c.func_hellow();
c.func_privet();
 
return 0;
}

Я решил создать для dll для класса, заголовочный класс класса у нас имеет вид function.h

1
2
3
4
5
6
7
8
9
10
11
#ifndef FUNCTION_H
#define FUNCTION_H
 
class My_class
{
public:
void func_hellow();
void func_privet();
};
 
#endif

ну и в конце копируем созданные ранее файлы библиотеки dll MyNewDll.dll и файл MyNewDll.lib в папку нашего проекта куда мы все подключаем и дальше включаем эти файлы в проект нажимаем горячую комбинацию клавиш Shift+Alt+A и выбираем их или правой клавишей клацаем в обозревателе решений по нашему проекту и переходим в нужную вкладкуimg15

появляется окошко в котором выбираем нужные файлыimg16

Нажимаем добавить и в обозревателе решений мы видим что эти файлы у нас добавились

img17

Ну и все мы подключили либу к нашему проекту, дальше нажимаем Ctrl+F5 и создаем проект, все нормально компилируется все работает.

В общем господа мы теперь умеем создавать и подключать динамические библиотеки в visual studio 2013. Для меня как новичка скажу честно это было сразу не легко, я скачивал либы и не знал как их подключить, я делал по простому скидывал все dll в Winsows/System32 , а все lib в папку для lib visual studio, но это не правильно, правильно это когда либы подключаются к создаваемому проекту, так что просто их подключайте к создаваемому проекту.

[youtube]http://www.youtube.com/watch?v=IqFdatdem64[/youtube]

2 thoughts on “Создание и использование динамических библиотек .dll в visual studio.”

  1. Danning:
    13 ноября, 2014 в 03:09

    Вроде все сделал как вы описали, но при запуске программы (Локальный отладчик) выбивает «Не удается запустить программу «..\имя_проекта.dll». Из-за чего это может быть?

    Ответить
    1. admin_kselax:
      21 февраля, 2015 в 07:49

      Не знаю, мб. у тебя версия visual studio не 2013, а какаето другая? Для visual studio 2013 должно работать!

      Ответить

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (1)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant