Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

jak przekazać tablice do funkcji FileStream.Write? VS C++ 2008 .NET

Ostatnio zmodyfikowano 2009-08-23 10:15
Autor Wiadomość
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:
C/C++
//::
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 ); //powiązanie tego

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
P-9473
GoldWolf
» 2009-08-15 10:41:26
Tutaj chyba nie ma specjalistów w tej dziedzinie.
P-9480
DejaVu
» 2009-08-15 13:06:50
Sprawdź czy fs!=NULL.
P-9483
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++.
P-19198
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.
P-19204
« 1 »
  Strona 1 z 1