[C++] C1091 compiler limit string exceeds 65535 bytes in length
Ostatnio zmodyfikowano 2016-03-10 16:42
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):
#define LAUNCHER_BITMAP_WIDTH (300) #define LAUNCHER_BITMAP_HEIGHT (100) #define LAUNCHER_BITMAP_BYTES_PER_PIXEL (4) #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"
);
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? |
|
DejaVu |
» 2016-01-20 23:04:59 Podziel string na kilka wierszy |
|
pekfos |
» 2016-01-20 23:52:17 Wrzuć to do zasobów programu. Albo zapisz dane do tablicy jako liczby, a nie tekst. |
|
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: unsigned char * getPixelData( void ) { static const unsigned char temp1[ 65521 ] = static const unsigned char temp2[ 54481 ] = static unsigned char pixelData[ 100 * 300 * 4 + 1 ]; std::copy( temp1, temp1 +( _countof( temp1 ) - 1 ), pixelData ); 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. |
|
pekfos |
» 2016-01-24 12:49:21 Zapisać danych jako tablicy liczb nie mogę (jest ich 120 000) |
A to dlaczego? |
|
C-Objective |
» 2016-03-05 10:11:01 W Java by nie mógł, ale w C++ może jak najbardziej ;P |
|
DejaVu |
» 2016-03-09 13:05:05 podziel tekst na kilka wierszy a nie na kilka tablic... |
|
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? |
|
« 1 » 2 |