|
Заблокирован
|
|||||||||||
STL in DLL, нормальная работа не возможна?04.11.2014, 22:09. Показов 5244. Ответов 40
Метки нет (Все метки)
Привет! Как известно, STL - это библиотека стандартных шаблонов, то есть template-ная библиотека, но шаблоны экспортировать же нельзя из DLL...
В общем, если даже создать базовый проект DLL в VisualStudio2013 и написать в экспортируемом классе так:
0
|
|||||||||||
| 04.11.2014, 22:09 | |
|
Ответы с готовыми решениями:
40
stl и dll STL внутри DLL Использование STL в DLL-файлах |
|
|
||
| 06.11.2014, 16:12 | ||
|
По крайней мере я пишу игру, а не отвлекаюсь на всякие STL, boost и прочие не нужные в играх вещи.
0
|
||
|
Заблокирован
|
|
| 06.11.2014, 16:15 [ТС] | |
|
Даже больше скажу, изучив подробней Pimpl я понял, что это ерунда.
И опять неоднозначность. Что посоветуете выбрать в случае не использования идиомы Pimpl, использования STL и с целью спрятать исходный код от будущих потребителей моей библиотеки с целью продажи им сего и невозможностью на его базе сделать без моего ведома слегка изменённый дубликат. Ну просто чтоб не воровали ититская туча ![]() 1. Собирать всё в DLL и управление выносить в С-шные интерфейсы 2. Забить на DLL, собирать всё в статическую библиотеку (LIB) и бояться, что у кого то она не будет работать, т.к. убеждённый пугал её несовместимость с разными версиями VisuaStudiom про другие IDE я вообще молчу. 3. Забить на всё и делать просто набор классов с открытым кодом, который можно продать один раз - потом сразу его украдут и пока лавэ ![]() Добавлено через 23 секунды
0
|
|
|
|
|
| 06.11.2014, 16:27 | |
|
0
|
|
|
Заблокирован
|
||
| 06.11.2014, 16:53 [ТС] | ||
|
В пользу варианты из п.3 можно сказать лишь то, что в принципе движок всё равно можно спереть и хакнуть, что его разработчик ничего не узнает, а игр можно делать много и на каждой зарабатывать,особенно в случае онлайн игр. Ну то есть чтоб зарабатывать не на движке, а на играх, на этом движке Всё. В топку, останавливаюсь на FastPimpl и DLL ![]() programina, я тебе на днях кину на геймдеве архив с моделью движка, ну там какие - нибуть окошки создавать можно будет - посмотришь, как удобно использовать что уже готовое из коробки
0
|
||
|
Заблокирован
|
|
| 06.11.2014, 17:55 [ТС] | |
|
0
|
|
|
|
||
| 06.11.2014, 18:25 | ||
|
0
|
||
|
Заблокирован
|
||
| 06.11.2014, 18:37 [ТС] | ||
![]() По сабжу: Если я буду писать игровой движок в чисто в наборах открытых классов, ну то есть ни в динамической библиотеке, ни в статической, то в теории, малой кровью, можно будет потом всё это барахло собрать в DLL, учитывая то, что буду использовать STL и не буду прятать реализацию в Private классы согласно Pimpl ?
0
|
||
|
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
|
||
| 06.11.2014, 18:47 | ||
|
0
|
||
|
|
|||
| 06.11.2014, 21:11 | |||
|
Например: внимание, только пока действует акция, вы можете купить у меня "супер-пупер многопользовательский экспериментальный шутер" и совершенно бесплатно получить поддержку движком игры света и динамических теней (библиотеки light.dll и shadow.dll)
0
|
|||
|
Заблокирован
|
|||
| 06.11.2014, 21:40 [ТС] | |||
), вот и все фокусы. То есть свой движок - то есть набор библиотек + готовые утилитки типа редакторов и пр + документация, можно продавать отдельно, чтоб программисты на этом движке делали свои игры и платили мне дань за использование движка (посмотри на любой движок - Unreal Develpment Kit / Unity3D тд - там схема аналогичная). Ну и естественно отдельный ЕХЕ будем с моей игрой, которую я и буду делать используя свой же движок. То есть я параллельно веду два проекта, движок и игру, развивая их параллельно. Как разовью движок до какого - то продакшен состояния, тогда уже и можно будет продавать его первую версию.
0
|
|||
|
|
|
| 06.11.2014, 21:48 | |
|
-THE_MASTER666-, а у тебя уже есть то, что можно класть в DLL?
Может сначала сделать более-менее сложную демосценку, а потом, убирать из нее в DLL. А то ведь ты когда сделаешь свою DLL будешь всем говорить, что не можешь показывать DLL так как боишься, что ее будут использовать в своих проектах постороние, и в итоге никто так и не увидит твою демосценку.
0
|
|
|
Заблокирован
|
|||
| 06.11.2014, 22:03 [ТС] | |||
|
А по поводу DLL... Я так и не у услышал какой -то дельной рекомендации по поводу того, как лучше спрятать код для продажи... Если делать DLL, то логичней использовать идеому Pimpl, но это ж такой геморой если разобраться, это по хорошему для каждого класса нужно делать прокси видимый класс, который будет повторять все функции... Геморойно как то и коряво. В общем я решил писать открытый код, точнее не сосем открытый, буду собирать отдельный проект из набора классов движка в статическую библиотеку и её уже буду использовать в программе - игре. Но по сути это открытый код. Всё путём! (точнее не всё, т.к. после первой продажи мои исходники поселяться на торретнах )
0
|
|||
|
Форумчанин
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 07.11.2014, 01:07 | |
|
Так вроде нормальная ситуация держать код в опенсорсе, радоваться тому, что сообщество его допиливает и продавать систему для корпоративных клиентов.
0
|
|
|
Вездепух
13240 / 6872 / 1827
Регистрация: 18.10.2014
Сообщений: 17,419
|
||
| 07.11.2014, 01:17 | ||
|
Проблема здесь совсем другого толка, не имеющего никакого отношения ни к шаблонам, ни к STL как таковому. Проблема в том, что DLL использует свои глобальные структуры управления динамической памятью, а внешний код - свои. Смешивать эти структуры - нельзя. Например, память выделенную через 'new' внутри DLL нельзя освободить через 'delete' во внешнем коде. Именно это мешает использованию STL контейнеров через границу раздела DLL и внешнего кода, именно потому, что STL контейнеры внутренне занимаются управлением динамической памятью.
0
|
||
|
Заблокирован
|
||||||||||||||
| 07.11.2014, 09:05 [ТС] | ||||||||||||||
|
Так же можешь глянуть про всё это дело тут https://rsdn.ru/article/cpp/stlproblem.xml например DLL:
0
|
||||||||||||||
|
Вездепух
13240 / 6872 / 1827
Регистрация: 18.10.2014
Сообщений: 17,419
|
|||
| 07.11.2014, 09:17 | |||
|
Первая проблема - именно то, что я описал выше. Не имеет никакого отношения к STL или шаблонам как таковым. Вторая проблема - действительно имеет место, но сильно зависит от реализации, и, как мне казалось, присутствующая только в архаичных версиях STL из старинных комплектов Visual Studio. Я не прав? Во-вторых, как правильно написано по вашей же ссылке, проблема характерна именно для ситуаций, когда DLL и основной код каждый используют свою отдельную копию статически прилинкованной библиотеки времени выполнения. Вы не забыли выбрать статическую линковку с библиотекой в настройках проекта? В-третьих, вполне может быть проблема уже починена в нынешних версиях.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 07.11.2014, 09:36 | ||
|
Добавлено через 15 минут Уточнение: под версиями понимаются как версии в сысле "экземпляры" одного и того же runtime, так и версии в смысле номеров релизов. Т.е. если у тебя dll статически линкует C++ runtime и exe статически линукет тот же самый runtime, то это вызовет проблемы на приведенном тобой коде. И если dll скомпилирована была с одной версией (в смысле номера версии релиза) C++ runtime, а exe с другой - это также приведет к прблемам в этом коде. Ключевые слова: нарушение ODR.
0
|
||
|
Заблокирован
|
|
| 07.11.2014, 10:44 [ТС] | |
|
Хмм, я забыл добавить, что в моём примере из поста 36 я подключал DLL-ку неявно через библиотеку импорта LIB.
Может в таком случае всё и должно работать? Я имею ввиду то, что возможно такие проблемы возникают только в случае LoadLibrary ? Ну когда библиотеку явно загружаешь и ищешь функционал по экспортируемым именам? По остальному - отвечу позжу
0
|
|
|
Форумчанин
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 07.11.2014, 12:10 | |
|
1
|
|
| 07.11.2014, 12:10 | |
|
Что такое вторая нормальная и третья нормальная форма 3 планки памяти - нормальная работа? Нормальная работа в JavaFX в intellej idea? Нормальная работа ПК только с интегрированной видеокартой Возможна ли работа базы данных 1С в Qt? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|