Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а как же фастколлы через регистры, если попросить?

    Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 15:14 06-12-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Там страшный бардак между компилерами/OSями, в каком регистре какой аргумент.

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:09 06-12-2013
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да надо самому всё жёстко строго описывать, без всяких дефолтов...

    Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 16:34 06-12-2013
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    смотреть в отладчике, пошагово проходя дисассемблированный код

    Оптимизация отключена, функция не inline. Код
    Самое раннее, когда могу остановить в этой функции - на 00439C4C (ESP=0x23fb80). До 00439C78 значение ESP сохраняется. После call оно становиться (ESP=0x23fb8C), после leave оно стало (ESP=0x23fb9C).  Если я правильно понимаю работу стека, то call (DLL функция) освободил часть стека на размер, равный размеру параметров (в данном случае 12 байт).  Похоже, что это и является причиной моих бед.
     
    P.S. Код поменялся, в конце теперь leave.
    Добавлено:
    Может я указатели для DLL функций объявляю неправильно?

    Код:
    typedef int __stdcall  (*T_AVS_Init) (short a_Port);

    а надо так?

    Код:
    typedef int   (__stdcall *T_AVS_Init) (short a_Port);

    Каюсь.
    После call появился магический SUB 0xC.

    Код:
    00446A58    call   *%eax
    00446A5A    sub    $0xc,%esp


    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 19:31 06-12-2013 | Исправлено: nick7inc, 20:26 06-12-2013
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc

    Цитата:
    До 00439C78 значение ESP сохраняется. После call оно становиться (ESP=0x23fb8C)

    Угу, функция stdcall. А вот компилятор вызывает её как cdecl, иначе после "call *%eax" стоял бы код "sub $0xc,%esp", возвращающий ESP в нужное положение. Проверьте объявление указателя на эту функцию.

    Цитата:
    после leave оно стало (ESP=0x23fb9C).

    leave возвращает ESP в состояние, в каком он был перед "push %ebp".

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 20:19 06-12-2013
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Кажется проблема решена (см. предыдущее сообщение). В объявлении typedef была ошибка, из-за чего компилер не считал эту функцию stdcall (не туда поставил ключевое слово).
     
    Всем спасибо!
     
    Добавлено:

    Цитата:
    leave возвращает ESP в состояние, в каком он был перед "push %ebp".

    Понял.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 20:22 06-12-2013 | Исправлено: nick7inc, 20:25 06-12-2013
    kkuuhhaa

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как получить беззнаковое значение двух байт?
    Для одного байта  
    char *source;
    unsigned char *msg;    
    msg=(unsigned char*) malloc(2);
    msg = reinterpret_cast<unsigned char*>(source+19);
     
    надо unsigned short из куска source
     
    ЗЫ ne_viens С bzip2 оказывается подсовывал не ту б-ку. Надо libbz2.lib

    Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 10:52 11-12-2013 | Исправлено: kkuuhhaa, 14:37 11-12-2013
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kkuuhhaa
    Вы указатель (адрес) присваиваете в качестве значения переменной.

    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 14:28 11-12-2013 | Исправлено: nick7inc, 14:28 11-12-2013
    kkuuhhaa

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc
    Ну исправил, про другое ж вопрос.

    Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 14:38 11-12-2013
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kkuuhhaa

    Цитата:
    msg=(unsigned char*) malloc(2);  

    Зачем?

    Цитата:
    надо unsigned short из куска source

    Дык, кто мешает кастовать указатель не к unsigned char*, а к unsigned short*?

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 15:04 11-12-2013
    suslovp

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    char *source;  
    unsigned short val;
     
    val = *((unsigned short*)(source+19));
     
    не?

    Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 15:08 11-12-2013
    kkuuhhaa

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    suslovp
    спасибо, оба варианта работают.

    Всего записей: 131 | Зарегистр. 14-05-2008 | Отправлено: 16:03 11-12-2013
    AlekseySerg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток.  Вот у же не первый день сижу и не одну книгу почитал. Не буду говорить, что нет того что надо. Просто  может  я не понимаю.  
    У меня есть выпадающее меню ComboBox в нем три строчки, при выборе одной  из строчек в окне Edit должно автоматически вводится числовое значение, которое как-то надо присвоит конкретной строчке! Как это сделать!

    Всего записей: 6 | Зарегистр. 11-12-2013 | Отправлено: 18:53 11-12-2013
    suslovp

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Заводишь массив с нужными значениями. В обработчике OnChange ComboBox'а по значению ItemIndex выбираешь нужный элемент из массива и отправляешь это значение в Edit. Профит %)

    Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 20:23 11-12-2013
    AlekseySerg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    suslovp
    Т. е. я должен ввести переменную которой задам нужные три значения, а по индексу строки присвоит одно из этих, а в Edit тоже сослаться на  сослаться  на индекс строки. Если вам не сложно как будет выглядеть исходный код. Я еще не совсем знаю все операторы и их свойства. Все делаю по примерам методом проб и ошибок.

    Всего записей: 6 | Зарегистр. 11-12-2013 | Отправлено: 21:00 11-12-2013
    Aktaf



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Решил еще обратиться, вдруг кто на этот раз ответит?
    Снова со своей версией ехе ки Вертуал Даба. Мне нужно вывести два значения - цифрики, начальную длину видео и длину получаемую после обработки. Хочу, использовать на мой взгляд "пустую" площадку программы с пользой. Дело осложняется тем, что главный вид в исходнике и даже в редакторах ресурсов не пощупать. Так бы полегче было бы даже мне сообразить как то. Есть два места куда бы я хотел попытаться пристроить. Прошу помощь (на рисунках нарисовано будущее расположение):
    1) [В правом краю, на уровне кнопок.] С левой стороны уже есть "полоска", куда выводиться подобная инфо - место нахождения ползунка в кадрах от начало, во времени и тип кадра. Можно попытаться скопировать в правый край. Не знаю как указать чтобы ее прижать в правый край? И подобная полоска как обозначается в описании (при программировании)?
    2) Можно попытаться расположить в нижнею полоску - Status bar. [Во всю ширину программы.] Там появляется разная инфо, в зависимости, куда направляется курсор мышки. Пока не знаю как эту полосу можно "поделить" чтобы тем конформациям не помешать. Не знаю так же как прижать к правому краю свою инфу. Второй вариант возможно даже лучше. Эту полосу можно убрать из виду когда надо, закрыть. При сужении программы новая инфо долго не будет зажиматься.
    А в первом варианте - кнопки, инфо с права и будущая - все это, будут находиться на одном уровне и при сужении будут "защемляться" (хотя не такая уж беда).  
    Подскажите пожалуйста как сделать.

    Всего записей: 2807 | Зарегистр. 06-02-2003 | Отправлено: 21:58 11-12-2013 | Исправлено: Aktaf, 14:29 12-12-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    >AlekseySerg
    Рабочий пример комбобокса, где едитбох меняется в зависимости от индекса выбранной строки:

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 23:20 11-12-2013 | Исправлено: ne_viens, 23:41 11-12-2013
    suslovp

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
    Ой, я бы испугался такого примера, непонятно же ничего %)
    Хотя да, человек не сказал в чём прогает.
     
    AlekseySerg
    Напишу для билдера:
    Заводишь глобальный массив:
    int data[3] = {1,13,666};
    В комбобоксе в обработчике события OnChange пишешь сточку:
    Edit1->Text = IntToStr(data[ComboBox1->ItemIndex]);

    Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 03:38 12-12-2013
    AlekseySerg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
    за пример спасибо!
    suslovp
    За замечание тоже спасибо и за  пример.  
    Я так и думал, что должно быть похоже на вот на это.  
    Сейчас для себя, может показаться что вопрос глупый, получается что массиву data присваивается ряд чисел,а как обработчик ComboBox понимает какое число какой строчке присвоить?
    з.ы.  
     Это я для понимания. Не люблю делать того, что не понимаю.
    И работаю я в Borland C++ Builder 6.0

    Всего записей: 6 | Зарегистр. 11-12-2013 | Отправлено: 10:16 12-12-2013 | Исправлено: AlekseySerg, 10:27 12-12-2013
    suslovp

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Чего-то не совсем пойму что тебе непонятно
    В ComboBox при выборе какой-то строки меняется параметр ItemIndex, и он соответствует номеру выбранной строки: 0, 1, 2, ..., n. Если использовать этот параметр как индекс элемента в массиве data[ComboBox1->ItemIndex], то из массива data можно выбрать число, которое ты заранее задал, которое как-бы будет соответствовать номеру строки ComboBox.

    Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 17:50 12-12-2013 | Исправлено: suslovp, 17:50 12-12-2013
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru