Форум программистов, компьютерный форум CyberForum.ru

Создание *.dll: для чего нужен компилятору параметр -DBUILD_DLL? (использую MinGW) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с файлом типа fstream http://www.cyberforum.ru/cpp-beginners/thread1091503.html
Пишем несложный код: fstream file("Test.txt",ios_base::in|ios_base::app); int cnt = 0; while (cnt < 3) { cerr << char(file.get()); cnt++; }
C++ Эмулятор. На С, С++ Здравствуйте уважаемые читатели форума! У меня такой вопрос: (СРАЗУ ПРЕДУПРЕЖДАЮ Я НЕ ОЧЕНЬ ХОРОШО РАЗБИРАЮСЬ ПОКА В ЭТОМ ТАК ЧТО ОЧЕНЬ МНОГОЕ ИЗ МОИХ СЛОВ МОЖЕТ БЫТЬ ЖУТКИМ ....) В качестве зачетного задания преподаватель задал написать эмулятор процессора, (ну вначале придумать архитектуру, и написать эмулятор этого). Шаблон он дал, там был примитивный ассемблер, написанный на перле. И на С... http://www.cyberforum.ru/cpp-beginners/thread1091494.html
C++ Использование стороннего CSP. Шифрование в программе
Снова обращаюсь к гуру программирования. Возникла ещё одна проблема, причём уже давно. Некоторые пользователи жалуются на невозможность использования программы по причине НЕсохранения их данных в форме ввода. Хотя автосохранение стоит. На данный момент в программе используется виндовый CryptAcquireContext для шифрования введённых данных (логин и пароль для доступа к персональному кабинету...
Я создаю утечки памяти ! C++
Нет, я не хочу похвастаться этим. Я любитель использовать быстрые решение для того чтобы реализовать алгоритм или проверить "чтобы работало", но как известно нет ничего более вечного, чем временное... ... время идет, а код остается :wall: Образец:HTEXTURE tex; tex = hge->Load_Texture("texture.png"); hgeSprite* sprite = new hgeSprite(tex,0,0,50,50); sprite->Render(); //Play delete sprite;...
C++ Каким образом идет поиск слов в кавычках? http://www.cyberforum.ru/cpp-beginners/thread1091483.html
Доброго времени суток! Вот вся программа #include <fstream> #include <iostream> #include <string> int main() { std::ofstream ofs("test.txt");
C++ Умножить матрицу 10х10 на вектор из 10 элементов дана матрица:10*10.умножить ее на вектор 10.помогите пожалуйста...очень нужно подробнее

Показать сообщение отдельно
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
18.02.2014, 14:12     Создание *.dll: для чего нужен компилятору параметр -DBUILD_DLL? (использую MinGW)
Цитата Сообщение от kravam Посмотреть сообщение
DrOffset, опять вы думаете обо мне плохо. Там именно то и написано, зачем нужен модификатор
C++
1
__declspec(dllimport)
Но зачем нужно вот это вот:
C++
1
2
3
4
5
6
7
#ifdef BUILD_DLL
   // the dll exports
   #define EXPORT __declspec(dllexport)
#else
   // the exe imports
   #define EXPORT __declspec(dllimport)
#endif
там об этом ни слова.
Ну раз зачем нужен __declspec(dllimport) понятно, то ответ зачем нужна конструкция выше, уже не раз сюда постили. Первый ответ в теме ну и мой ответ, например.

Ну, могу еще раз.
Ситуация:
Я разработчик библиотеки (dll). Я собираю свою библиотеку из исходников и указываю макрос -DBUILD_DLL в мэйкфайле.
Конструкция выше срабатывает и проставляет всем функциям __declspec(dllexport), перед которыми стоял EXPORT (на самом деле EXPORT некорректный пример и только запутывает. Лучше использовать нотацию из моего примера. Или посмотреть на WIN32 API (например в файле winbase.h функции помечены как WINBASEAPI). Простановка __declspec(dllexport) помечает функции как экспортируемые. Смотрим MSDN:
Declaring functions as dllexport eliminates the need for a module-definition (.def) file, at least with respect to the specification of exported functions.
То есть это нужно, чтобы была возможность вызывать функции через границу модуля.

Ситуация 2:
Теперь я пользователь библиотеки. Я подключаю заголовочный файл вышеозначенной библиотеки, естественно никакой -DBUILD_DLL я не указываю в своем мэйкфайле. Автоматически начинает применяться вариант__declspec(dllimport). Зачем он нужен, ты уже понял.

ЗЫ. В линуксе, например, можно обходиться без всего этого. Там правила игры немного другие. Но есть похожие по форме приемы (в моем примере как раз один из вариантов). Подробнее тут.
 
Текущее время: 03:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru