Yazar |
|
huseyinkozan
Serik
Kayıt: 21.03.2007 |
|
selam, şöle bi sorunum var, epey uğraştım çözemedim:
// ekran görüntüsünden aldığım bmp yi jpeg kaydetmek için fonk.
void saveJpeg(void)
{
Image * b = new Image(L"test.bmp");
CLSID jpgclsid;
GetEncoderClsid(L"image/jpeg", &jpgclsid);
if(Ok != b->Save(L"screenshot.jpg", &jpgclsid))
MessageBox(NULL, L"Screen to Compat Blt Failed", L"Error", MB_OK);
delete b;
}
burda şu hatayı veriyo : First-chance exception at 0x770fd058 in YukselBilgisayarClient.exe: 0xC0000005: Access violation writing location 0x00000014.
inline Status
GetImageEncodersSize(
OUT UINT *numEncoders,
OUT UINT *size)
{
return DllExports::GdipGetImageEncodersSize(numEncoders, size);
}
bunu çağıran da şuradan alınmış ( jpeg için CLSID yi almaya yarayan) fonksiyon:
http://msdn2.microsoft.com/en-us/library/ms533843(VS.85).aspx
ayrıca derleyiciye şu yoldan gdiplus.lib i tanıttım:
Project > Project Properties > Conf. Prop. > Linker > Input > Add. Dep. > gdiplus.lib
fikri olan var mı ?
|
|
Yazar |
|
caglarmenguc
istanbul
Kayıt: 29.01.2006 |
|
merhaba.
kodu denemedim ama aynı sorunla karşılaşmış kişinin exception almasının nedeni GDI+ ı initialize etmeyi unutmasıymış;
hatta o kişinin kendi ağzından;
the problem for jpeg got solved. i haven't initialized the GDI+ that was the problem there.
ilgili link;
http://www.codeguru.com/forum/archive/index.php/t-366244.html
verdiğin linkte nasıl initialize edileceği var (http://msdn2.microsoft.com/en-us/library/ms533843(VS.85).aspx)
// Initialize GDI+.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Life is a game of cards...
A good player, even with a bad hand of cards, will play well and emerge a winner...
|
|
Yazar |
|
huseyinkozan
Serik
Kayıt: 21.03.2007 |
|
abi çok mersi yaa
ben o initialize kısmını bmp ile halledicem diye silmiştim, sonra da tekrar kullanınca patladı tabi
thx a lot
bişey daha sorsam, CLSID nesnesini delete jpg... ile silmeye çalışınca :
Error 1 error C2440: 'delete' : cannot convert from 'CLSID' to 'void *'
diyo, bunu <static_cast> ile bişeyler yapmak mı lazım ? (bunun ne olduğunu bilmiyorum bu arada, bi yerde gördüydüm : )
CLSID nin delete operatörü ezilmiş (override mıydı neydi o kelime :) edilmiş, DeleteObject denen fonk. da işe yaramıyo. nesneyi silmezsem akıtıcam ( leak yapcam manasına : )
bu nasıl çalışır ?
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
Sadece new operatörü ile oluşturulmuş nesneler delete operatörü ile yok edilir diye biliyorum. Normal bir değişken gibi oluşturulan nesneler de fonsiyon sonlandığında bellekten siliniyor.
Let`s make this world a better place to live !
|
|
Yazar |
|
caglarmenguc
istanbul
Kayıt: 29.01.2006 |
|
new ile yer ayrılan değişkenler heap de dururlar, eğer uygulama çalışıyorken new ile yer ayrılan değişkenler delete ile silinmezse memory leak ile karşılaşılır, yani program bellekte şişmeye başlar.
new ile yer ayrılmamış değişkenlerde heap alanı kullanılmaz. stack te yer ayrılır ve değişkene ait scope tan çıkıldığında artık o bellek alanını için başka bir değişken tahsisi yapılabilir.
sonuç olarak; sadece new ile heap te yer ayırdığınız göstericileri delete ile silebilirsiniz. stack te duran değişkenler delete ile silinemezler. stack in kontrolü işletim sistemine aittir.
Life is a game of cards...
A good player, even with a bad hand of cards, will play well and emerge a winner...
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| |