Neznáma chyba. prosím o korektúru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Neznáma chyba. prosím o korektúru – C / C++ – Fórum – Programujte.comNeznáma chyba. prosím o korektúru – C / C++ – Fórum – Programujte.com

 

tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #1
-
0
-

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]);
}

Nahlásit jako SPAM
IP: 84.47.86.–
tito100
~ Anonymní uživatel
11 příspěvků
1. 7. 2009   #2
-
0
-

ešte by som doplnil, že do dll môžem odoslať premenné len typu double a char .

Nahlásit jako SPAM
IP: 84.47.86.–
Wizard0
Stálý člen
1. 7. 2009   #3
-
0
-

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 .

Nahlásit jako SPAM
IP: 85.216.193.–
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

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

Kde je chyba? Prosím o pomoc — založil whysper

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý