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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Dev_tech
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 4
#1

Использование STL в DLL-файлах - C++

22.04.2011, 21:29. Просмотров 1547. Ответов 7
Метки нет (Все метки)

Хочу использовать библиотеку STL в своем DLL-проекте. В частности для обеспечения функциональности требуется применение классов vector и string.
Проблема заключается в том, что объекты классов, размещенные в этом DLL-файле и работающие с STL-классами, при уничтожении вызывают ошибку. Причем не на стадии компиляции, а во время выполнения программы.
Использовать CArray и CString и другие типы не имеется возможности. Нужен кросс-платформенный код, который можно компилировать как динамические библиотеки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2011, 21:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование STL в DLL-файлах (C++):

Использование указателей на контейнеры STL в заголовочных файлах - C++
Для использования указателей на I/O классы достаточно включить <iosfwd> который содержит опережающие объявления и таким образом появляется...

использование stl - C++
Тема для читателей книг и учебников... Такой способ работы с векторами верен или нет (код рабочий) с точки зрения теории: #include...

Использование алгоритмов STL - C++
Здравствуйте. Ребят пожалуйста решите 2 простенькие задачки, потратьте немного своего времени, очень прошу. Заранее огромное спасибо...

STL in DLL, нормальная работа не возможна? - C++
Привет! Как известно, STL - это библиотека стандартных шаблонов, то есть template-ная библиотека, но шаблоны экспортировать же нельзя из...

Использование двух контейнеров из STL - C++
Нужно, чтобы: 1) Каждый объект имел свой уникальный ключ. 2) Быстрая выборка по ключу. 3) Быстрое прохождение по всем объектам. ...

Использование класса list STL - C++
Здравствуйте, у меня есть базовый класс и унаследованный от него. Мне надо хранить в этом одном списке либо указатели на объекты базового...

7
palva
2745 / 1846 / 266
Регистрация: 08.06.2007
Сообщений: 7,027
Записей в блоге: 4
22.04.2011, 22:20 #2
Наверно, объект у вас создается в DLL, а уничтожается в основной программе или наоборот? Нужно либо это устранить, либо использовать API функции GlobalAlloc/GlobalFree. Если память выделяется при выполнении new, значит придется переопределять operator new. Имеются другие варианты решения проблемы - пользоваться OLE API функциями типа CoTaskMemAlloc.
0
Dev_tech
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 4
22.04.2011, 22:40  [ТС] #3
В DLL-файле содержится только исходный код двух классов, один из которых абстрактный. В основной программе создается объект одного из этих классов, потом происходит вызов некоторых функций-членов и завершение программы, а соответственно и удаление объекта.
Специально вызывал деструктор класса и отслеживал все в дебагере - ошибка происходит на нем.
Операторы new и delete используются только во внутренних функциях класса - его объекты создаются простым объявлением.
Отдельно, вне DLL, оба класса совершенно корректно работают.
0
Meer
0 / 0 / 0
Регистрация: 19.02.2011
Сообщений: 17
23.04.2011, 15:49 #4
http://www.rsdn.ru/article/cpp/stlproblem.xml
0
Sandr_from_COBRA
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 10
25.04.2011, 04:48 #5
На самом деле может быть много ошибок как явных так и неявных - это просто гадания на кофейной гуще. Если это действительно для тебя большая нерешаемая проблема, давай исходняк с комментариями.
0
Dev_tech
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 4
25.04.2011, 17:59  [ТС] #6
Все отлично работает без использования .dll, при обычном подключении файлов в проект. Все функции нормально работают и все объекты нормально уничтожаются.
0
Sandr_from_COBRA
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 10
26.04.2011, 04:16 #7
Ошибка может быть неявной, может себя вести по разному в разных условиях. Наверное ты гденить перекрываешь участок памяти. Всё это происходит в тайне от тебя.
0
Sandr_from_COBRA
0 / 0 / 0
Регистрация: 20.03.2011
Сообщений: 10
28.04.2011, 10:28 #8
Помойму ответ на твой вопрос нашолся
http://www.rsdn.ru/
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2011, 10:28
Привет! Вот еще темы с ответами:

Использование стандартных компонентов stl - C++
Помогите реализовать задачу с помощью stl Даны натуральное число n, действительные числа a1, ... , a2n . Вычислить (задание на снимке) я...

Использование структуры в файлах проекта - C++
Доброго времени суток всем. У меня тут маленькая проблемка появилась.. Вот есть у меня такой код: // programm.cpp struct NewsInfo ...

Использование enum в нескольких файлах - C++
Как объявить или куда поместить enum mode{x, y, z} чтобы его можно было использовать в файлах f1.h и f2.h ? (mode- один из аттрибутов...

Использование контейнера string из библиотеки STL - C++
Дан массив слов. Сформировать новое слово из символов слов массива, стоящих после последнего символа ‘*’ в слове. Сформировать предложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
28.04.2011, 10:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru