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

[C++] C1091 compiler limit string exceeds 65535 bytes in length

Ostatnio zmodyfikowano 2016-03-10 16:42
Autor Wiadomość
TheReclif
Temat założony przez niniejszego użytkownika
[C++] C1091 compiler limit string exceeds 65535 bytes in length
» 2016-01-20 22:53:44
Witam!
Byłem ostatnio zmuszony, żeby w swojej aplikacji pisanej pod Windowsa z użyciem WinAPI przechowywać bitmapę nie w formie oddzielnego pliku z bitmapą, ale w pamięci (bity odpowiadające pikselom zadeklarować w pliku źródłowym/nagłówkowym). Kod wygląda mniej więcej tak(wygenerowany przez Gimpa):
C/C++
// GIMP RGBA C-Source image dump (LauncherBitmap.c)

#define LAUNCHER_BITMAP_WIDTH (300)
#define LAUNCHER_BITMAP_HEIGHT (100)
#define LAUNCHER_BITMAP_BYTES_PER_PIXEL (4) // 3:RGB, 4:RGBA
#define LAUNCHER_BITMAP_PIXEL_DATA ((unsigned char*) LAUNCHER_BITMAP_pixel_data)
static const unsigned char LAUNCHER_BITMAP_pixel_data[ 300 * 100 * 4 + 1 ] =
( "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
// I tak dalej
);
Błąd występuje gdzieś w linijkach tej tablicy i oznacza przekroczenie maksymalnego rozmiaru inicjalizacji tablicy.
Moje pytanie jest takie: jeżeli taka bitmapa ma się znajdować w statycznie dołączanej bibliotece (tak jak teraz) to jak można zaimplementować taką wielką tablicę np. w formie funkcji zwracającej referencję na statyczną tablicę charów?
P-143838
DejaVu
» 2016-01-20 23:04:59
Podziel string na kilka wierszy
P-143840
pekfos
» 2016-01-20 23:52:17
Wrzuć to do zasobów programu. Albo zapisz dane do tablicy jako liczby, a nie tekst.
P-143841
TheReclif
Temat założony przez niniejszego użytkownika
» 2016-01-24 11:54:38
Zapisać danych jako tablicy liczb nie mogę (jest ich 120 000), ale postanowiłem podzielić tą tablicę na dwie mniejsze, a potem stworzyć nową o wielkości docelowej, skopiować do niej zawartość dwóch mniejszych tablic używając std::copy, a potem zwrócić, jako wartość, tą większą tablicę. Oto, co wyszło:
C/C++
unsigned char * getPixelData( void )
{
    static const unsigned char temp1[ 65521 ] = // Ciąg znaków
    static const unsigned char temp2[ 54481 ] = // Drugi ciąg znaków
   
    static unsigned char pixelData[ 100 * 300 * 4 + 1 ];
   
    // _countof(arg) - makro w Visual Studio pozwalające na uzyskanie ilości elementów w tablicy (ale nie we wskaźniku lub w dynamicznie alokowanej tablicy!)
    std::copy( temp1, temp1 +( _countof( temp1 ) - 1 ), pixelData ); // Czemu (_countof(temp1) - 1)? Bo nie kopiuję ostatniego znaku, jakim jest null(/0)
   
    std::copy( temp2, temp2 + _countof( temp2 ), pixelData + _countof( temp1 ) );
   
    return( unsigned char * ) pixelData;
}
Wyjaśnienia dotyczące kodu są w komentarzach. Skończoną funkcję umieściłem w statycznym libie i próbowałem to skompilować. Build w trybie Release się udał, ale w trybie Debug wyskakuje ostrzeżenie kompilatora, które jest błędem (kod błędu C4996, opis na msdn-ie). To chyba związane z używaniem jakiś iteratorów czy coś. I tu jest moje pytanie: jak prawidłowo użyć std::copy, żeby nie wywalało tego błędu oraz, jeżeli nie można inaczej, to czego użyć zamiast tej funkcji? Dzięki za dotychczasową pomoc.
P-143951
pekfos
» 2016-01-24 12:49:21
Zapisać danych jako tablicy liczb nie mogę (jest ich 120 000)
A to dlaczego?
P-143953
C-Objective
» 2016-03-05 10:11:01
W Java by nie mógł, ale w C++ może jak najbardziej ;P
P-145571
DejaVu
» 2016-03-09 13:05:05
podziel tekst na kilka wierszy a nie na kilka tablic...
P-145792
C-Objective
» 2016-03-09 14:57:28
Na pewno to zadziała? Zdaje mi się że nie, ale ma prawo, lecz jak w takim razie przechowasz te wiersze tekstu? Nie możesz tego przechowywać w pliku?
P-145796
« 1 » 2
  Strona 1 z 2 Następna strona