STL + DLL = QPA!

Do tej pory AGE było tylko biblioteką statyczną. Zechciałem więc żeby dało się skompilować jako DLL. Dowiedziałem się co trzeba zrobić, wrzuciłem odpowiednie kawałki kodu tam gdzie trzeba. Kompilacja. Linkowanie. Wszystko poszło OK. Mam age.dll oraz age.lib więc zabieram się za test.

Tworzę sobie nowy projekcik piszę to co trzeba i uruchamiam. Działa! Pokazało mi się puste czarne okienko – i o to chodziło ^^ Problem pojawił się kiedy stworzyłem klasę dziedziczącą po ageTask. Nagle wyskoczył błąd i program się wywalił.

Skompilowałem sobie więc age_d.dll (debug) i spróbowałem raz jeszcze. Krótka randka z debuggerem i okazało się, że std::string ma jakieś problemy z alokowaniem pamięci. Poszperałem w necie, zapytałem na forum i moje przypuszczenia się potwierdziły: DLL i STL to nie jest dobre połączenie.

Udało mi się jednak znaleźć stronę na której jest sposób na obejście tego problemu. Okazuje się jednak, że możliwe jest to dla std::string oraz std::vector a co z potrzebnym mi std::map? Nic z tego!

Dlatego też postanowiłem napisać własną mini-bibliotekę zawierającą klasy  list, string oraz map. Klasę string właściwie już skończyłem. Interfejs ma prawie identyczny z std::string. Mówię prawie, bo dodałem do niej metodę print( char *format, … ) dzięki której będzie można formatować wygodnie tekst oraz powycinałem te mniej potrzebne metody ^^.

Jeśli chodzi o list to interfejs będzie zupełnie inny niż ten z std::list lub std::vector. Powodem jest nie mniej nie więcej tylko to, że są po prostu brzydkie ^^.

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s