Консультация № 95493
17.07.2007, 23:41
0.00 руб.
0 1 1
Доброго времени суток!
Продолжу тему STL.
Из ответов на мой предыдущий вопрос № 94826 я для себя выяснил,
что VC6+SP5 иногда некорректно работает с STL. Решил тогда я
создать dll-ку с нужной мне ф-цией в VC2005 или через gcc под Винды.
(см. приложение) и подключить ее к проекту на VC6. Но пока ничего
не получилось. Эта схема не работает даже в VC2005, хотя если делать
все в одном файле - в VC2005 все работает.
Возможно я не учел какие-то тонкости VC2005 но ошибка выскакивает
при попытке освобождения памяти из кучи при удалении элемента списка.
С явной загрузкой библиотеки тоже проверял - тоже не работает.
Спасибо за ответы.


Приложение:
#include <list>#include <string>using namespace std;typedef list < string, allocator < string > > LISTSTR;// Used to customize list::remove_if()class is_four_chars : public not_equal_to<string>{public: bool operator()(const string& rhs, const string&) const { return rhs.size() == 4; }};extern "C" __declspec (dllexport) void removeif(LISTSTR &lst){ // Remove any strings that are four characters long lst.remove_if(bind2nd(is_four_chars(),"1"));}Вызывающая программа с исполдьзованием неявной загрузки библиотеки.---------------------------------------------------------------------------------------#include < cstdlib >#include < iostream >#include < list >using namespace std;typedef list<string, allocator<string> > LISTSTR;void removeif(LISTSTR &lst);int main(int argc, char *argv[]){ LISTSTR lst; LISTSTR::iterator i; lst.push_back("good"); lst.push_back("bad"); lst.push_back("ugly"); removeif(lst); for (i = lst.begin(); i != lst.end(); ++i) cout << *i << " "; cout << endl; system("PAUSE"); return EXIT_SUCCESS;}

Обсуждение

Неизвестный
18.07.2007, 00:08
общий
это ответ
Здравствуйте, kool!
Первое, что приходит на ум - сравните headers использованные в библиотеке с 2005. Если есть отличие в определении типа string, то очевидно объект созданый в приложении будет иметь размер отличный от объекта созданого в библиотеке.
Кроме того непонятна "неявность загрузки". В аппликации должен быть включен header вашей библиотеки и она должна быть добавлена к списку линкуемых библиотек.
Форма ответа