Здорова господа!!!
Мы рассмотрим такой вид подключаемых библиотек таких как .dll это типо динамические библиотеки, если код из статических либ добавлялся в сам exe файл и после компиляции программы программа работала без этой библиотеки, то .dll нужно что бы был рядом с исполняемым файлом. Я сам недавно с ними познакомился и только знаю как их создавать и подключать. Считается вроде как эти либы типо как то экономят оперативную помять компьютера ну что то вроде этого, я читал так и не понял, ну это в принципе не сильно важно для новичков, а важно это как их создавать и как использовать.Ну ладно начнем потихоньку.
1. Создание библиотеки .dll
Открываем файл -> создать -> проект
Открывается окно создать проект, выбираем консольное приложение win32, вводим название проекта я ввел MyNewDll и выбираем где будет сохранен проект и нажимаем кнопку Ок и мы попадаем в мастер приложений
Нажимаем Далее и открывается окно в котором выбираем «библиотека DLL» и ставим галочку «пустой проект»
Нажимаем готово, все проект для создания динамических библиотек создан. Дальше создаем заголовочный файл 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 и выбираем их или правой клавишей клацаем в обозревателе решений по нашему проекту и переходим в нужную вкладку
появляется окошко в котором выбираем нужные файлы
Нажимаем добавить и в обозревателе решений мы видим что эти файлы у нас добавились
Ну и все мы подключили либу к нашему проекту, дальше нажимаем Ctrl+F5 и создаем проект, все нормально компилируется все работает.
В общем господа мы теперь умеем создавать и подключать динамические библиотеки в visual studio 2013. Для меня как новичка скажу честно это было сразу не легко, я скачивал либы и не знал как их подключить, я делал по простому скидывал все dll в Winsows/System32 , а все lib в папку для lib visual studio, но это не правильно, правильно это когда либы подключаются к создаваемому проекту, так что просто их подключайте к создаваемому проекту.
[youtube]http://www.youtube.com/watch?v=IqFdatdem64[/youtube]
Вроде все сделал как вы описали, но при запуске программы (Локальный отладчик) выбивает «Не удается запустить программу «..\имя_проекта.dll». Из-за чего это может быть?
Не знаю, мб. у тебя версия visual studio не 2013, а какаето другая? Для visual studio 2013 должно работать!