zdravým všetkých.
v c++ pracujem len druhý den. a po napísaní mojho DLL sa mi vyslitla neznáma chyba.
dll mi normálne funguje. masku môžem vytvoriť, nastaviť jej obsah. následne ho načítať. potom uložiť , aj načítať.
problém nastáva vtedy ked vypnem program ktorý dll používa. po vypnutí sa shrúti .
týmto prsím niekoho ochotného. či by mi mohol spraviť kolektúru celého kódu. podla mna je jednoduchšie ako písať tu čo všetko mám zle. takisto netuším ako spraviť deinicializáciu dll.
každému som vopred vďačný.
(kódované v devc++)
zdroják:
// C/C++
#define export extern "C" __declspec (dllexport)
#include <windows.h>
#include <vector>
#include <fstream>
#include <stdio.h>
using namespace std;
class MASK
{
private:
int width;
int height;
vector< vector<char> > pole;
public :
MASK(){}
MASK(int w, int h)
{
width=w;
height=h;
pole.resize(w);
for (int i; i<w;i++)
{
pole[i].resize(h);
}
for (int i=0;i<w;i++)
{
for (int e=0;e<h;e++)
{
pole[i][e]=false;
}
}
}
void set_element(int w, int h,char value)
{
pole[w][h]=value;
}
char get_element(int w, int h)
{
return (pole[w][h]);
}
int get_width()
{
return (width);
}
int get_height()
{
return (height);
}
int empty()
{
for (int i; i<width;i++)
{
pole[i].empty();
}
pole.empty();
}
};
vector< MASK *> zoznam_mask;
int last_mask;
export double init()
{
last_mask=1;
}
export double create_mask(double w, double h)
{
zoznam_mask.resize(zoznam_mask.size()+1);
zoznam_mask[zoznam_mask.size()]= new MASK((int)w,(int)h);
return (zoznam_mask.size());
}
export double mask_set_element(double id, double w, double h,double value)
{
zoznam_mask[(int)id]->set_element( (int)w, (int)h, (int)value);
}
export double mask_get_element(double id, double w, double h)
{
return (zoznam_mask[(int)id]->get_element( (int)w, (int)h));
}
export double mask_save(double id,char *fname)
{
MASK * ukMask = zoznam_mask[(int)id];
FILE *fsave;
int w = ukMask->get_width();
int h = ukMask->get_height();
long buff_size=w*h+(sizeof(int)*2);
char buffer[buff_size];
fsave = fopen(fname, "wb");
setbuf(fsave,buffer);
if (!fsave) {fclose(fsave); return (-1);}
fwrite(&w,sizeof(int),1,fsave);
fwrite(&h,sizeof(int),1,fsave);
for (int i=0;i<w;i++)
{
for (int e=0;e<h;e++)
{
if (ftell(fsave)>buff_size) {fclose(fsave); return (-2);}
char value=ukMask->get_element(i,e);
fwrite(&value,sizeof(char),1,fsave);
}
}
fflush(fsave);
fclose(fsave);
return (true);
}
export double mask_load(char *fname)
{
FILE *fload;
fload = fopen(fname, "rb");
int w ;
int h ;
if (!fload) {fclose(fload); return (-1);}
fread(&w,sizeof(int),1,fload);
fread(&h,sizeof(int),1,fload);
MASK * ukMask = new MASK(w,h);
zoznam_mask.resize(zoznam_mask.size()+1);
zoznam_mask[zoznam_mask.size()] = ukMask;
for (int i=0;i<w;i++)
{
for (int e=0;e<h;e++)
{
char value;
fread(&value,sizeof(char),1,fload);
ukMask->set_element( i, e, value);
}
}
fclose(fload);
return (zoznam_mask.size());//zoznam_mask.size()
}
export double mask_delete(double id)
{
zoznam_mask[(int)id]->empty();
delete(zoznam_mask[(int)id]);
}
Fórum › C / C++
Neznáma chyba. prosím o korektúru
Padne ti to pravdepodobne preto, lebo dynamicky vytvorene objekty 'MASK' nikde nemazes. Bud pouzi vector, ktory nebude ukladat pointery ale rovno objekty, alebo pri uvolnovani DLL s pamete vymaz vsetky dynamicky alokovane objekty - budes musiet doprogramovat funkciu DLLmain - http://msdn.microsoft.com/en-us/library/ms682583(VS.85).aspx .
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 12 hostů
Podobná vlákna
Vyjimka neznama chyba — založil Kvetr
V čem je prosím chyba? — založil Honza Polášek
Chyba v Mozzile... Prosim o pomoc — založil Opicakuz
Kde je chyba? Prosím o pomoc — založil whysper
Chyba parsování XML - prosím o pomoc — založil MaxDJs
Moderátoři diskuze