Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: DLL-tiedostot ja C++:n headerit

mika132 [17.11.2009 19:35:38]

#

Eli tämä ei ole koodiini liittyvä kysymys vaan kysyn yleisesti, kun en mitään suomenkielistä kunnollista vastausta löytänyt niin mitä tarkalleen C++ Headerit tekevät ja miten niitä voi tosissaan hyötykäyttää, esim jos niitä tekee itse.

Entä DLL kirjastot. Miten niitä voi hyöty käyttää? Ja mitä ominaisuuksia DLL kirjastot pitävät sisällään? Eli mitä niillä saa tehtyä lyhyesti selitettynä.

Kiitos. =)

Metabolix [17.11.2009 20:48:47]

#

Molempiin kysymyksiisi kylläkin vastataan C++-oppaassa.

mika132 [17.11.2009 21:11:28]

#

Eli

Header:
Kannattaa käyttää kaikkien funktioiden sisältämiseen esimerkiksi peli.h jossa on kaikki pelin funktiot.

DLL:
Ymmärsin vain sen, että se on dynaaminen. En mitään muuta. :/


Olisi tälläinen varmaan melko perustieto, mutta minulle tietämätön.

On esimerkiksi .exe tiedosto nimi olisi vaikka. pelini.exe jos avataan kansio jossa tuo on niin tiedoston kuvakkeen vieressä lukee seuraava rivi:

pelini.exe


Mutta jos katson joitakin ammattilaisten tekemiä pelejä niissä saattaa lukea:

pelini.exe
ValuSoft
V.1.0


Eli miten nuo alemmat tiedot saadaan siihen. En tiedä ymmärsittekö jos ette kertokaa, niin liitän kuvia.

Metabolix [17.11.2009 21:30:36]

#

DLL sisältää funktioita aivan samalla tavalla kuin EXE. Kuten oppaassa sanotaan (luitko kunnolla?), on aika kätevää, että yleiset funktiot ovat koneella vain yhdessä DLL-tiedostossa sen sijaan, että jokainen ohjelma sisältäisi niistä oman kopionsa.

Kaikkia ohjelman funktioita ei kannata koota yhteen otsikkotiedostoon. Yleensä tehdään niin, että A.h sisältää asiaan A liittyvien funktioiden esittelyt ja A.cpp sisältää niiden toteutukset (esim. aanet.h ja aanet.cpp). Jos katselet SDL:n otsikkotiedostoja, niin SDL.h lähinnä sisällyttää joukon muita otsikoita kuten SDL_video.h, SDL_audio.h, SDL_timer.h jne.

Deffi [18.11.2009 00:06:45]

#

mika132 kirjoitti:

pelini.exe
ValuSoft
V.1.0


Eli miten nuo alemmat tiedot saadaan siihen. En tiedä ymmärsittekö jos ette kertokaa, niin liitän kuvia.

Aika epäolennaista ja eipä nyt kauheesti kannattas tuhlata energiaa tämmösiin. Kuitenkin, se onnistuu lisäämällä projektiin VERSIONINFO-resurssi. Semmosen lisääminen on melko kääntäjäsidonnainen juttu, mutta onnistuu usein helposti IDE:n valikoiden ja työkalujen kautta. Tarvittavat tiedostot voi luoda käsinkin, näin MinGW:llä:

resource.rc

1 VERSIONINFO
FILEVERSION     1,0,0,0
PRODUCTVERSION  1,0,0,0
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080904E4"
    BEGIN
      VALUE "CompanyName", "Company Name"
      VALUE "FileDescription", "Application"
      VALUE "FileVersion", "1.0"
      VALUE "InternalName", "app"
      VALUE "LegalCopyright", "Name"
      VALUE "OriginalFilename", "app.exe"
      VALUE "ProductName", "App"
      VALUE "ProductVersion", "1.0"
    END
  END

  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x809, 1252
  END
END

Kääntö tapahtuu tähän malliin (main.c ja utils.c kuvitteellisia tiedostoja ja vain esimerkin vuoksi mukana)

gcc -c -o main.o main.c
gcc -c -o utils.o utils.c
windres resource.rc -O coff -o resource.res
gcc -o app.exe main.o utils.o resource.res

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta