Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Windows98-ongelma

Metabolix [09.07.2004 00:51:22]

#

Ongelmanani on tekemieni ohjelmien toimimattomuus Windows98:ssa. Käytössäni on VC++ 2003.NET (VC++ 7.1), jonka Microsoft on suuressa viisaudessaan tehnyt toimimaan vain Windows2000:ssa ja uudemmissa järjestelmissä. Muutenhan ongelmani olisi ratkaistu, kun pystyisin debuggaamaan ohjelmiani Win98:ssa. Windows2000:ssa ne toimivat moitteetta.

Ongelma ilmenee niissä ohjelmissa, joissa käytän Bitmap-luokkaani. Sen sijaan ongelman laatu vaihtelee eri käynnistyskerroilla (ohjelman sisältö ei vaikuta). Oudoimmillaan ohjelma toimii moitteetta hetkisen, kunnes yhtäkkiä kuvat eivät enää piirry ollenkaan. Muita vaihtoehtoja ovat mm. laiton toiminto heti käynnistyessä tai koneen täydellinen jumittuminen.

Toistaiseksi kaikki ongelmat ovat ilmenneet, kun teen taulukollisen "Bitmap *"-olioita tai taulukollisen structeja, joihin sisältyy "Bitmap *". Sen sijaan ohjelma, joka vain jatkuvasti piirtää samaa Bitmappia ruudulle (Bitmap *Kuva;) toimii.

Bitmap-luokka(saa käyttää jos haluaa.)
Tertix-peli(ainakin omassa 98:ssa toimi tuolla oudolla tavalla.)

Olen kokeillut vaihtoehtoa "Optimize for Windows98". Ei auttanut.
Olen tehnyt VC++:n Helpin ohjeiden mukaan ja määrittänyt kohdejärjestelmäksi Windows98:n (Windows versio 0x0410). Ei auttanut.

Mitä voin vielä tehdä toisin?

rutkis [09.07.2004 11:50:59]

#

Koodissasi on todnäk bugi jonka XP osaa hoitaa kaatumatta, mutta 98 tileksii.

Esim: bool Bitmap::Create(HDC hdc, LPTSTR FileName, UINT StartPos):ssa on pieni muistivuoto:
BITMAPINFO* BmpInfo = (BITMAPINFO*)(new BITMAPINFO_256);
Et tuhoa tuota BmpInfo oliota missään?

Koodisi näytti kyllä muuten ihan lailliselta pikaisella vilkaisulla.

Mainitset että taulukollinen Bitmappeja aiheuttaa ongelman niin kannattaa käydä tarkasti läpi constructorit.

Miten esittelet taulukollisen Bitmap*:ja?

Metabolix [09.07.2004 12:45:04]

#

rutkis kirjoitti:

Esim: bool Bitmap::Create(HDC hdc, LPTSTR FileName, UINT StartPos):ssa on pieni muistivuoto:
BITMAPINFO* BmpInfo = (BITMAPINFO*)(new BITMAPINFO_256);
Et tuhoa tuota BmpInfo oliota missään?

hBitmap = CreateDIBSection(hdc, BmpInfo, DIB_RGB_COLORS, (PVOID*)&pBitmapBits, NULL, 0);
Siitä tulee osa hBitmapia.

lainaus:

Mainitset että taulukollinen Bitmappeja aiheuttaa ongelman niin kannattaa käydä tarkasti läpi constructorit.

Mitä tarkoitat? Tuossa Tertixissä luon ne kaikki resursseista heti kun voin, kaikki samalla tavalla, paitsi resurssin nimi vaihtelee.

lainaus:

Miten esittelet taulukollisen Bitmap*:ja?

Bitmap *Taulukko[20];
Taulukko[0] = new Bitmap();
Taulukko[1] = new Bitmap();
...

Metabolix [09.07.2004 16:00:32]

#

Eniten tuossa kiinnostaa tuo outo tapaus jossa homma toimii aluksi hyvin. Ohjelmassa ei ole mielestäni mitään, mikä kuvan voisi tuhota kesken kaiken. Onko kenelläkään ideoita?

Metabolix [09.07.2004 19:24:21]

#

Ongelma löytyi. Onnea Microsoftille. Taas tekivät virheen.

VC++ Help kirjoitti:

Windows 95/98: TransparentBlt contains a memory leak that can exhaust system resources. To draw a transparent bitmap using BitBlt, see Knowledge Base article Q79212.

Edit: Päätin kirjoittaa taas lähes turhan viestin.

Vastaus

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

Tietoa sivustosta