| | |
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Autor | Správa |
---|
Registrovaný: 01.07.09 Prihlásený: 03.07.09 Príspevky: 1 Témy: 1 |
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:
Kód: // 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]); }
ešte by som doplnil, že do dll môžem odoslať premenné len typu double a char .
|
|
Registrovaný: 10.07.09 Prihlásený: 14.01.13 Príspevky: 28 Témy: 3 | Napísal TJ: 13.07.2009 19:58 | |
|
Pravdepodobe chyba bude pri funkcii mask_delete. Po prve, metoda empty len vrati, ci je vector prazdny, alebo nie. A pred uvolnovanim pamate "delete" by bolo dobre skontrolovat, ci taky elemt existuje. Asi by som to riesil takto:
Kód: export double mask_delete(double id) { if (!zoznam_mask[(int)id]->empty() && zoznam_mask.size() > (int)id && zoznam_mask[(int)id] != null) delete(zoznam_mask[(int)id]); }
|
|
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Chyba 101 (net::ERR_CONNECTION_RESET): Neznáma chyba. v Sieťové a internetové programy | 0 | 2812 | 26.02.2011 11:36 000kiko000 | | Neznáma chyba v HTML, XHTML, XML, CSS | 3 | 387 | 30.07.2012 19:53 Alastor | | neznama chyba v PHP, ASP | 2 | 468 | 29.11.2007 20:37 tatysp | | neznama chyba v Ostatné | 14 | 241 | 16.02.2024 12:59 pcamater | | avast- neznama chyba v Antivíry a antispywary | 2 | 550 | 06.09.2007 17:10 Marx911 | | Neznáma chyba GOOGLE EARTH v Ostatné programy | 0 | 358 | 15.03.2017 12:37 DavidB | | externe DTD - neznama chyba v HTML, XHTML, XML, CSS | 3 | 637 | 23.05.2007 17:35 imcold | | neznáma chyba v poli v PHP, ASP | 7 | 527 | 14.05.2010 15:09 1daemon1 | | Validácia stránky, neznáma chyba v HTML, XHTML, XML, CSS | 18 | 985 | 05.01.2010 18:17 Unlink | | BIND & NAMED - neznáma chyba ?? v Operačné systémy Unix a Linux | 3 | 533 | 08.12.2009 21:36 Filipyno | | Slovanet - pomalý net - neznáma chyba v Poskytovatelia internetu | 7 | 795 | 30.06.2015 8:40 shiro | | C - GetConsoleWndHandle Chyba v Assembler, C, C++, Pascal, Java | 4 | 244 | 05.03.2014 8:58 Xperience | | C - chyba v syntaxe v Assembler, C, C++, Pascal, Java | 18 | 1013 | 17.12.2008 19:57 gnk | | stop c 0000221 chyba v Operačné systémy Microsoft | 5 | 263 | 19.11.2016 21:02 michalesku | | chyba - MS Visual C++ v Antivíry a antispywary | 6 | 737 | 13.10.2009 20:42 citizen | | chyba Microsoft visual C++ 2008 v Ostatné programy | 4 | 1061 | 19.11.2010 0:29 sync2 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|