stl and dll
От: Alex_st Россия  
Дата: 10.08.02 13:59
Оценка:
Вот есть такая проблемка:
имеется dll и в ф-я


#ifdef DLLTEST_EXPORTS
#define TEST_EXPORT __declspec( dllexport )
#else
#define TEST_EXPORT __declspec( dllimport )
#endif

void TEST_EXPORT f(string str)
{
// тут нечто делаем
}

так вот проблемма в том, что когда я пытаюсь экспортировать енту делелю
компилятор говорит что мол у string нет dll интерфейса,
и если вызывать ее примерно так:
f("test");

то все мило падает
может кто знает как это обойтити?
Re: stl and dll
От: achp  
Дата: 10.08.02 14:12
Оценка:
Здравствуйте Alex_st, Вы писали:

AS>Вот есть такая проблемка:

AS>имеется dll и в ф-я

AS>

AS>#ifdef DLLTEST_EXPORTS
AS>#define TEST_EXPORT __declspec( dllexport )
AS>#else
AS>#define TEST_EXPORT __declspec( dllimport )
AS>#endif

AS>void TEST_EXPORT f(string str)
AS>{
AS>// тут нечто делаем
AS>}
AS>

AS> так вот проблемма в том, что когда я пытаюсь экспортировать енту делелю
AS>компилятор говорит что мол у string нет dll интерфейса,
AS>и если вызывать ее примерно так:
AS>
AS>f("test");
AS>

AS>то все мило падает
AS>может кто знает как это обойтити?

Заклинаю: не делай так! Не используй контейнеры и иные классы STL в межмодульных интерфейсах! Это приводит к головным болям и порче мозгов!

Коротко о главной причине: у тебя нет никаких гарантий насчет бинарной совместимости передаваемых структур. Структуры и даже внутреннее поведение объектов могут различаться не только от компилятора к компилятору, но даже и зависеть от настроек одного и того же компилятора.
Re: stl and dll
От: Юнусов Булат Россия  
Дата: 10.08.02 15:39
Оценка:
Здравствуйте Alex_st, Вы писали:

когда то обсуждалось
Автор: Юнусов Булат
Дата: 17.02.02
Re: stl and dll
От: rh2000  
Дата: 13.08.02 07:39
Оценка:
AS>то все мило падает
AS>может кто знает как это обойтити?

еще сюда
Автор(ы): Роман Хациев
Дата: 27.02.2002
Если вы пытались работать с экземплярами классов STL, передавая их в DLL, или получая оттуда, а потом бросили это занятие из-за непонятных ошибок, возникающих в вашей программе, то эта заметка для вас. Даже если видимых проблем в вашей программе нет, то все равно прочитайте эту заметку, чтобы знать что делать, когда они появятся :)
погляди
Re[2]: stl and dll
От: ~Yuriy~ www.inspira.by.ru
Дата: 13.08.02 15:27
Оценка:
Здравствуйте achp, Вы писали:

A>Здравствуйте Alex_st, Вы писали:


AS>>Вот есть такая проблемка:

AS>>имеется dll и в ф-я

AS>>

AS>>#ifdef DLLTEST_EXPORTS
AS>>#define TEST_EXPORT __declspec( dllexport )
AS>>#else
AS>>#define TEST_EXPORT __declspec( dllimport )
AS>>#endif

AS>>void TEST_EXPORT f(string str)
AS>>{
AS>>// тут нечто делаем
AS>>}
AS>>

AS>> так вот проблемма в том, что когда я пытаюсь экспортировать енту делелю
AS>>компилятор говорит что мол у string нет dll интерфейса,
AS>>и если вызывать ее примерно так:
AS>>
AS>>f("test");
AS>>

AS>>то все мило падает
AS>>может кто знает как это обойтити?

A>Заклинаю: не делай так! Не используй контейнеры и иные классы STL в межмодульных интерфейсах! Это приводит к головным болям и порче мозгов!


A>Коротко о главной причине: у тебя нет никаких гарантий насчет бинарной совместимости передаваемых структур. Структуры и даже внутреннее поведение объектов могут различаться не только от компилятора к компилятору, но даже и зависеть от настроек одного и того же компилятора.


Не все так печально. Если ты используешь MSVC 6.0 то тебе нужно поставить SP5 а также пофиксить STL,
возьми здесь — http://www.dinkumware.com/vc_fixes.html. Вообще к твоей проблеме это не
имеет отношения но поможет избавиться от головных болей и порче мозгов правда не всех, мне пришлось
еще коечто фиксить но это мелочи... слушай дальше ... тебе нужно компилить проект как многопоточный,
std::string "виден" из msvcp60.dll, еще есть способы, но этого достаточно ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.