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

Рубрика: Visual Studio, Дата: 8 December, 2013, Автор:

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

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

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

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

img11

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

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

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

//function.h
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport) 
#else
#define MATHFUNCSDLL_API __declspec(dllimport) 
#endif

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

#ifndef FUNCTION_H
#define FUNCTION_H

	MATHFUNCSDLL_API void func_hellow();
	MATHFUNCSDLL_API void func_privet();

#endif

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

#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 а реальный от этот

#ifndef FUNCTION_H
#define FUNCTION_H

void func_hellow();
void func_privet();

#endif

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

function.h:

#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:

//#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

#include "function.h"

int main()
{
	My_class c;
	c.func_hellow();
	c.func_privet();

	return 0;
}

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

#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]

  • Danning

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

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

rss