Zenedith's dev blog

Dałem się namówić.., szatanowi chyba..

MySQL Connector/C++ : dostęp do bazy danych w cpp.

Jak połączyć się z bazą danych MySQL z poziomu kodu w języku cpp? Najprościej przy użyciu biblioteki MySQL Connector/C++. Możemy ją znaleźć na stronie dev.mysql.com/doc/refman/5.1/en/connector-cpp.html a dokładniej ściągnąć ze podstrony w sekcji download.

Potrzebujmy również bazy danych MySQL – ja skorzystałem z wersji mysql-5.0.67-win32.exe ale na stronie oficjalnej można znaleźć znacznie nowsze wersje.

Zastrzeżenie jest jedno – wersja którą ściągniemy musi posiadać katalogi include i lib (jeśli jest to archiwum zip) lub dać możliwość instalacji tych folderów, jak pokazuje screen poniżej:

mysql_libs_install

W związku z tym nie jest pewien co do zawartości wersji Essential, którą można znacznie szybciej ściągnąć ze względu na jej mniejszy rozmiar.
Czytaj dalej

Reklamy

19 Styczeń, 2009 Posted by | cpp | , | Dodaj komentarz

Play Music : Vorbis(Ogg) + OpenAL

Postanowiłem napisać krótki wpis na temat odtwarzania dźwięku z poziomu kodu aplikacji. Ponieważ zależało mi na darmowych najprostszych rozwiązaniach, bez zbędnej „tony” innych „bajerów” (SDL_Mixer), wybrałem kombinację VorbisFile (biblioteka libvorbis) wymagające biblioteki libogg które można pobrać z jednego miejsca tutaj oraz OpenAL.

Instalacja bibliotek nie powinna sprawić nikomu problemu – ściągamy bibliotekę libogg-x.y.z.zip, rozpakowujemy, otwieramy plik solucji w Visual Studio, kompilujemy wersje bibliotek które chcemy później użyć (ja poprzestałem na wersjach static), zgrywamy lib’y do jednego zbiorczego katalogu a include do drugiego, które następnie dodajemy w opcjach Visual Studio VC++ Directories. Podobnie postępujemy z libvorbis. Wszystkie lib’y mam w jednym katalogu lib, a include w jednym katalogu include.
Pozostaje jeszcze ściągnąć ze strony OpenAL Creativelabs plik SDK OpenAL Installer for Windows (oalins), zainstalować i dodać do ścieżek lib\ i include\ Visual Studio.
Na końcu prezentuję parę screenów które mogą pomóc to o czym mówię. Czytaj dalej

28 Sierpień, 2008 Posted by | cpp, engine | | Dodaj komentarz

JNI #2 – Stawiamy JVM

Pierwszą część mamy już za sobą. Potrafimy już tworzyć skomplikowane skrypty w Javie i korzystać z natywnego wsparcia ze strony cpp. Pozostaje więc teraz cały proces odpalić z exe..Stworzymy teraz aplikację startującą JVM i nasze skrypty – otrzymamy więc możliwość stworzenia „silnia gry” z Javą jako językiem skryptowym! Do dzieła. Czytaj dalej

31 Lipiec, 2008 Posted by | cpp, engine, game, java, scripts | , , , , | Dodaj komentarz

JNI #1 – Eclipse + CDT + MinGW

Pisałem już o różnych językach skryptowych – postaram się opisać przynajmniej podstawy współpracy z cpp z każdym z nich. Dziś przedstawię jak wygląda współpraca Javy i cpp przez interfejs JNI (Java Native Interface).

Tak jak w temacie, pokażę jak napisać prosty pomost między Javą a cpp przy wykorzystaniu IDE Eclipse z biblioteką CDT5.0 oraz wykorzystując toolchain’a MinGW. O sposobie konfiguracji takiego środowiska wspomniałem już wcześniej, a więc zaczynamy. Czytaj dalej

23 Lipiec, 2008 Posted by | cpp, java, scripts | , , , , , , | 4 Komentarze

Jak to było: Nauka cpp część 2

Miałem chwilowy zawrót głowy więc się trochę ten wpis opóźnił. Przejdźmy jednak na powrót do nauki cpp.

Zaczynamy od samych podstaw. Jak już pisałem w jednym z pierwszych wpisów na moim blogu, można rozpocząć od dwóch następujących pozycji:

  1. Symfonia C ++ Standard – mam wersję 3 tomową, wydanie 5 poprawione. Obecnie dostępna jest odświeżona wersja, opisująca i zgodna z obecnymi standardami języka cpp uzupełniona np. o opis i wykorzystywanie klasy std::string. Dokładne informacje można uzyskać ze spisu treści.
    Uważam, że książka jest rzeczywiście „łatwym podręcznikiem”, jak pisze sam autor – zawiera bardzo przyjazne zapoznanie czytelnika z prezentowanym zagadnieniem, odpowiada na szereg pytań które się nasuwają (bądź nie) przy czytaniu kolejnych rozdziałów. Uważam że książka przeznaczona jest dla każdego, kto chce się nauczyć programować. Bardzo dużo przykładów, tłumaczonych czytelnikowi linia po linii.
    Książka ta wprowadzi nas w solidne podstawy języka cpp. Jej uzupełnieniem była kiedyś seria Pasja C++, lecz nie wiem jak to obecnie wygląda.
  2. Thinking in C++ oraz Thinking in C++ Tom 2 – możliwa do pobrania w formie ebook’ów ze strony domowej autora. Autor jest równie niesamowity w cierpliwym i przyjaznym tłumaczeniu zagadnień jak autor wspomniany wyżej. Bardzo dużo przykładów, bardzo dobre wprowadzenie w świat obiektów. Drugi tom wprowadza w bardziej zaawansowane wykorzystywanie cpp. Olbrzymim plusem jest oczywiście inicjatywa udostępnienia wersji elektronicznych swoich (wybranych) książek – jedyną przeszkodę może stanowić znajomość języka angielskiego…

„Nie od razu Rzym zbudowano” i do tematyki programowania należy podejść z olbrzymią dozą samozaparcia i co najważniejsze: przepisywać kod do używanego IDE i kompilować. Zmieniać. Kompilować. Dzięki temu nasza wiedza będzie nie tylko teoretyczna (która nie będzie ugruntowana) ale również praktyczna (wyłapiemy wtedy bardzo szybko błędy składniowe, utrwalimy sobie słowa kluczowe języka, wzorce tworzenia metod, klas – jednym słowem praktyka).

Czytaj dalej

26 Czerwiec, 2008 Posted by | books, cpp | , , | Dodaj komentarz

Bjam i kompilacja bibliotek Boost’a.

BoostBoost jest potężnym zbiorem bibliotek rozszerzających funkcjonalności języka cpp oraz STL – można powiedzieć, że Więcej niż C++. Obecnie dostępna wersja to 1.43.0. Z Boost’em miałem już do czynienia w przeciągu ostatnich miesięcy ale nie było to doznanie na wyższym poziomie – używałem po prostu „zwykłego” Boost’a.
Niedawno postanowiłem przyjrzeć się bliżej biblioteką wchodzącym w skład Boost’a – na początek padło na Filesystem. Wcześniej miałem prekompilowane liby i dll’e w katalogu boost_1_43_0/lib, które załatwił za mnie świetny system build’u Boost.Build współpracujący z Boost.Bjam.
Wystarczy bowiem w pliku boost_1_43_0\tools\build\v2\user-config.jam odkomentować środowisko, dla którego ma nastąpić kompilacja (using msvc ; dla Visual Studio lub using gcc ; dla np. MinGW) oraz dodać aplikację bjam.exe do zmiennej środowiskowej PATH i odpalić z katalogu głównego Boost’a polecenie „bjam” (domyślnie kompilowane są wersje release ale możemy skompilować obie wersje przez polecenie „bjam debug release” ). Skompilowane lib’y trafią wówczas do katalogu bin.v2 chyba że ustawimy inaczej.
Alternatywnie dostępny jest wszystko mający, wszystko robiący instalator, który można znaleźć na stronie http://www.boostpro.com.

Próba kompilacji projektu w wersji Debug i runtime library ustawione na Multi-threaded Debug DLL (/MDd) zakończyła się jednak niepowodzeniem z komunikatem:
LINK : fatal error LNK1104: cannot open file ‚libboost_filesystem-vc80-mt-gd-1_43.lib’
LINK : fatal error LNK1104: cannot open file ‚libboost_system-vc80-mt-gd-1_43.lib’

Boost stosuje konwencję oznaczania plików statycznych bibliotek przez dodatnie przedrostka lib.

Nie posiadałem bibliotek w wersji Debug, które boost oznacza zawierając w opisie znaki -gd . Odpalenie polecenia „bjam debug” załatwiło problem.

Jeśli chcemy skorzystać z runtime library w wersji Multi-threaded Debug (/MTd), to musimy posiadac skompilowane biblioteki z przełącznikiem runtime-link=static, a więc używając polecenia „bjam runtime-link=static debug„-biblioteki te bedą w nazwie zawierać znaki -sgd.

Mamy jeszcze 3 możliwość, prawdziwą wersję dynamic, gdzie biblioteki boost’a będą wymagały plików dll wykorzystywanych bibliotek. Tę opcję załączy dla nas makro:
#define BOOST_ALL_DYN_LINK
zdefiniowane przed includem bibliotek Boost.

Bardzo użyteczne w sprawdzaniu jakie biblioteki są linkowane, jest makro
#define BOOST_LIB_DIAGNOSTIC,
które powoduje wypisywanie w oknie Output naszego IDE nazw linkowanych bibliotek.

Dla zobrazowania jak kształtują się wielkości plików wykonywalnych w poszczególnych opcjach kompilacji, prezentuję małe zestawienie:

debug, Multi-threaded Debug DLL (/MDd) , DYN_LINK: -gd-1_43.lib , 112 kb
debug, Multi-threaded Debug DLL (/MDd): -gd-1_43.lib , 173 kb
debug, Multi-threaded Debug (/MTd): -sgd-1_43.lib , 718 kb

release, Multi-threaded DLL (/MD), DYN_LINK: 38 kb
release, Multi-threaded DLL (/MD): 43 kb
release, Multi-threaded (/MT): s-1_43.lib , 169 kb

23 Czerwiec, 2008 Posted by | boost, cpp | , , | 3 Komentarze

Jak to było: Nauka cpp część 1 (tło)

Mój pierwszy sensowny kontakt z cpp jak i z java miałem na studiach. Do tamtej pory „bawiłem” się dość ambitnie w php4 robiąc pewną grę (bijatykę turową) na podstawie świata Dragon Ball (swoją drogą bardzo fajna seria anime i mangi) oraz mniej ambitnie w delphi. Jednak dopiero poznanie tej największej wartości wśród programistów gier (czyli cpp) pozwoliło mi spojrzeć na tworzenie oprogramowania w inny sposób. Czytaj dalej

18 Czerwiec, 2008 Posted by | cpp, java | , | Dodaj komentarz

Java -> cpp

Trudno jest powrócić do cpp, gdy przez dobry rok pracowało się niemal wyłącznie w środowisku Javy. Prawda jest taka, że w czasie tym skupiłem się na poznaniu nowej technologi, jaką oferuje MS w postaci języka C# i całego tego „managed”.

Było fajnie – szybkość tworzenia aplikacji i intuicyjna praca – tak jak w Java’ie. Nawet jeśli chodzi o tematykę gier i tworzenia na XBOX’a, czyli technologię XNA i Managed DX. Niestety, MS się wycofał z dalszego wspierania MDX i przerzucił wszystko do XNA – mi to nie pasuje.

Zatem jak szybko przestawić się na język cpp?

Zacząłem od Symfonii – dość szybko przeleciałem stare, 3 tomowe wydanie. Okazało się, że jest to dość „stary” język cpp, poza tym nie bardzo kojarzyłem czym tak naprawdę jest STL – a o tym mówiła Pasja, której niestety nie posiadałem.

Odwiedziłem trochę portali internetowych znalazłem bardzo przyjemny, na czasie kurs, który brzmiał bardzo górnolotnie ” Megatutorial “Od zera do gier kodera”. Wprowadza czytelnika w świat cpp od podstaw, przechodząc do coraz bardziej skomplikowanych mechanizmów tego języka, mając cały czas na uwadze wszelkie niuanse i zwracając uwagę na mogące się pojawić problemy. Kurs ten omawia również technologię WinAPI, czyli programowania pod Windows.

22 Grudzień, 2007 Posted by | books, cpp, java | , | Dodaj komentarz