Форум программистов, компьютерный форум 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
19.02.2014, 19:38     Создание *.dll: для чего нужен компилятору параметр -DBUILD_DLL? (использую MinGW)
Цитата Сообщение от kravam Посмотреть сообщение
А вы пишите что прямой он не может создать ни при каких условиях...
прямой он может создать только если известен адрес! Адрес известен если функция в том же приложении. Т.е. прямой вызов будет только если функция НЕ dll. Однако как я писал, компилятор не может определить сам где находится функция, поэтому он генерит прямой вызов, который потом делает прыжок на таблицу импорта (или не делает, если функция таки в нашем приложении). Если мы указываем import, то прямого вызова на jmp не происходит, а сразу идет непрямой из таблицы импорта.
Т.е., еще раз. Если функция (func1) в dll и не помечена import, то:
1) Генерится прямой вызов на адрес находящийся внутри приложения.
2) По этому адресу размещен прыжок на таблицу импорта.
3) Происходит непрямой вызов через отрезовленный адрес через таблицу импорта.

Если функция помечена import:
1) Сразу происходит непрямой вызов через таблицу импорта.

Теперь внимание! Это очень важно!
Я отключаю dll от проекта и создаю еще один cpp с реализацией функции funс1:
1) Генерится прямой вызов на адрес находящийся внутри приложения (func1).

Видишь, первые этапы одинаковы в случае когда функция не помечена как import.

Добавлено через 12 минут
Вот нашел качественную ссылку:
However, the matching double compile is not performed when consuming
libraries. It is therefore not possible to reliably distinguish if the
consumer is importing from a DLL or if it is going to use a static
library.
И действительно, дизайн языков С и С++ построен так, чтобы исключить лишние этапы компиляции из процесса сборки. Более того (сейчас это не всегда так) раньше и С и С++ использовали совершенно одинаковый линкер.
 
Текущее время: 07:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru