| Автор |
Съобщение |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
 VB6 голям масив ?
Как се декларира голям ( 1М елементи) масив във VB6?
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Нед Фев 12, 2006 5:41 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
И на мен ми е интересно как става работата с много големи масиви в Visual C++ na Microsoft.
|
| Нед Фев 12, 2006 5:52 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
..ако може и някой да ми каже дали има и как се прави #define на VB6 ...
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Нед Фев 12, 2006 9:47 pm |
|
 |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
На С (и ++ предполагам), като си правиш Windows приложение, неща от вида
си работят съвсем нормално; писал съм и под ДОС extender подобни неща; Грижата остава в операционната система, и ако няма как - гърми и не пуска програмата изобщо.
|
| Нед Фев 12, 2006 9:55 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Re: VB6 голям масив ?
|
| Нед Фев 12, 2006 9:59 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
после задължително не трябва да се забравя да се освободи:
|
| Нед Фев 12, 2006 10:01 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
Мерси Реконструктор, стана
Но защо като декларирам:
гърми с: Compile error: Overflow а като декларирам:
или както е написал Реконстуктор, си работи нормално ?
.. може да задавам тъп въпрос, но не съм работил много с VB и не се сещам
а, и трябва ли да се освобождава после масива ?
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Нед Фев 12, 2006 11:03 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Защото компилаторът ти изчислява 1024 * 128 и се мъчи да го напъха в integer ( max 32767 ). Напиши ((1024 * 128)ul).
|
| Нед Фев 12, 2006 11:08 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Точно така бате, но това няма да работи.  Няма как да се направи по този начин (с формула).
|
| Нед Фев 12, 2006 11:39 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
Добре де, като декларирам
работи, въпреки, че 131072 > 32767. Тази декларация не означава ли че искам да ми задели 131072 Integer-а ?? Защо трябва размера да се мъчи да го напъха в Integer? Значи ако му кажа: примерно, също работи. А - неще.
Нещо ми се губи логиката ...
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Фев 13, 2006 10:13 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Гърми, когато предпроцесорът изчислява. Ако го вземе "сдъвкано" - няма проблем.
|
| Пон Фев 13, 2006 12:24 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
аааа, сега стоплих
мерси!
..баси колко съм отвеян 
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Фев 13, 2006 12:26 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
VB е доста тъп език с доста странности.  Ако искаш хубав RAD, насочи се към на Борланд продуктите, java или C#.
Значи за конкретната странност на VB. Определянето на типа на аргумента в скобите става според стойността му.  Т.е. когато напишеш
транслатора вижда, че 131072 > 32767 и сътветно пъха това число в променлива тип Long. Ако напишеш понеже отново 131072 > 32767, транслатора го приема за Long и после умножава по 5, като резултата е, че нямаш проблеми.  Ако, обаче, напишеш след като 1024 < 32767, транслатора го приема за Integer, постава 1024 в променлива от тоя тип и после като умножи със 128 се получава препълване на Integer-a. По повод на горното, че няма решение на проблема, малко поизлъгах, забравил съм тоя език. По принцип за цифровите константи има постфиксни определители на типа. Например, & е определител за Long, а # е определител за Double. Ако напишеш, например
Няма да имаш проблеми, защото & force-ва транслатора да приема 1024 за Long, въпреки, че е < 32767. Същото се отнася, ако напишеш (1024# * 128) - в този случай 1024 ще се приеме за Double.
|
| Пон Фев 13, 2006 12:38 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
Е, тва не го знаех!
Мерси, Реконструктор!

_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Фев 13, 2006 12:52 pm |
|
|