jak przekazać tablice do funkcji FileStream.Write? VS C++ 2008 .NET
Ostatnio zmodyfikowano 2009-08-23 10:15
skirki Temat założony przez niniejszego użytkownika |
jak przekazać tablice do funkcji FileStream.Write? VS C++ 2008 .NET » 2009-08-15 00:01:48 Witam napotkałem ostatnio taki problem mam pisze program w którym jest ref klasa BMP w niej są zawarte róznie skonwertowane tablice charów(odpowiadające bitmapie bez nagłówka, z itp..) W momencie tworzenia wywolywany konstruktor wczytuje bitmape obcina nagłówek i konwertuje z 24 do 16 bitowej. pozniej zapisuje sobie ją w takim formacie *.cfx (tak sobie wymyslilem) nastepnie potrzebuje sprawdzic zapisany plik i podzielic go na ramki po 528 znaków (bo mają byc one wysłane do pamięci która zapisuje dane po stronie 528 ) gdy wszystko było zrobione w jednej funkcji (w bałaganie bez klas to program dział) ale teraz ciagle sie wykrzacza w momencie wywołania funkcji FileStream.Write(...) gdzie funkcji write próbuje przekazać uchwyt do tablicy aby zapisała go do pliku. Próbowałem juz chyba wiekszosci standardowych metod, wyluskiwania, tworzenia nowych tablic identycznych co tablica w klasie i w petli jej kopiowanie ale zawsze w momencie albo gdy wywolywana jest funkcja Write albo przy kopiowaniu tablicy do wytworzonej następnej program sie wykrzacza, i juz nie mam pomyslu jak sobie z tym poradzić. Poniżej zamieszczam problematyczną czesc kodu: ref class BMP { public: BMP(); BMP( array < unsigned char >^ ); ~BMP(); void wczytajBitmape( array < unsigned char >^ ); void zapiszLiczbeKolorow(); void zapiszWielkoscNaglowka(); void zapiszSzerokoscBitmapy(); void zapiszWysokoscBitmapy(); void zapiszLiczbeDodanychPikseli(); void zapiszBitmapaBezNaglowka(); void zapiszBitmapaBezDodania(); void zapiszBitmapaLCD(); char pokaz( int ); int pokazLiczbeKolorow(); int oddajCzyBitmapaLCD(); array < unsigned char >^ bitmapaLCD; private: array < unsigned char >^ bitmapaWczytana; array < unsigned char >^ bitmapaBezNaglowka; array < unsigned char >^ bitmapaBezDodania; int liczbaKolorow; int wielkoscNaglowka; int czyBitmapaLcd; unsigned int dodanePiksele; long szerokoscBitmapy; long wysokoscBitmapy; };
::
a nast ę pnie w programie g ł ó wnym
static FileStream ^ fs; ::
if(( File::Exists( Application::StartupPath + "\\" + nazwa + ".cfx" ) ) &&( czy_kontynuacja_zapisu == 0 ) ) { File::Delete( Application::StartupPath + "\\" + nazwa + ".cfx" ); fs = File::Open( Application::StartupPath + "\\" + nazwa + ".cfx", FileMode::Append, FileAccess::Write ); czy_kontynuacja_zapisu = 1; byl_zapis = 1; } }
czy_wczytanie = true; czy_bitmapa = true;
array < unsigned char >^ bitmapa_LCD = gcnew array < unsigned char >(); bitmapa->oddajBitmapeLCD( bitmapa_LCD );
int licznik; int t; t = bitmapa_LCD->Length;
fs->Write( bitmapa_LCD, 0, t );
licznik = bitmapa_LCD->Length; if(( licznik % 528 ) != 0 ) { licznik =( 528 -( licznik % 528 ) ); for( int zk = 0; zk < licznik; zk++ ) { fs->WriteByte( ' ' ); } }
pr ó bowa ł em jeszcze czegos takiego
dodawalem metode do klasy void SkopiujTablice
void BMP::skopiujTablice( array < unsigned char >^ A ) { int i = 0; int t = bitmapaLCD->Length; for( i = 0; i <= t; i++ ) { * A[ i ] = bitmapaLCD[ i ]; } } ::
i tutaj program pada z komunikatem ze wyszedł poza indeks |
|
GoldWolf |
» 2009-08-15 10:41:26 Tutaj chyba nie ma specjalistów w tej dziedzinie. |
|
DejaVu |
» 2009-08-15 13:06:50 Sprawdź czy fs!=NULL. |
|
manfred |
» 2009-08-15 01:01:53 Ale oczywiście "C++" w nazwie działu oznacza, że można wrzucać kody we wszystkich językach, nie? Jak C++, to C++. Nie C++/CLI, nie Perl, nie COBOL, tylko C++. |
|
manfred |
» 2009-08-23 10:15:59 To byłby NullReferenceException. Takie rzeczy sprawdza sam .NET, a skoro ma IndexOutOfRangeException, to wyjechał poza tablicę. array < unsigned char >^ bitmapa_LCD = gcnew array < unsigned char >(); To się kompiluje? Nie kłam. |
|
« 1 » |