Здравствуйте 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, еще есть способы, но этого достаточно ...