Adomb |
Отправлено: 07 Февраля, 2019 - 21:12:17
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Я писал в теме поиска текста про проблему вылета Кибора при обращении к readtext.
В функции такой код (это часть кода, нужные переменные объявлены)
CODE: string Text[2]; char wer[25];
v: if(z<x)
{siz=0;
if(readtext (NUM | MARK, #Text[0], 14, 3, -1,-1,-1,#CT[0],-1, 5, 50, 522,234, 713,261, as)>0)
{for(n=0; n<2; n++){strcpy(#wer[siz], Text[n]); siz=size(#wer[0]);} deletetext(#wer[0], " " | "-" ); pz=formatsn(format(#wer[0]));}
N[z]=pz;
Npow[z2]=pz;
z=z+2;
z2++;;
sendmouse(LEFT, 380, 520, as); pause(rand(1100, 2000));
goto v;
К распознованию обращается несколько раз подряд.
Все косяки отловил, проблема в том, что в собранном exe не хочет работать. Первое обращение к readtext распознаёт, цифры правильно определяет, а при втором обращении exe вылетает.
В самом Киборе же работает исправно, также работает в собранном exe с загрузкой скрипта с сервера.
Exe пробовал собирать на двух компах. Вылетают именно на этом месте.
(Добавление)
Вобщем непонятно. Если добавить
CODE:deletetext(#wer[0], "0 " | "1" | "2" | "3 " | "4" | "5" | "6 " | "7" | "8" | "9"); sleep(10);
то собранный exe начинает работать, если убрать - вылетает.
Повторю, в киборе работает без добавления.
(Добавление)
CODE:string Text[2]; char wer[25];
v: if(z<x)
{siz=0; deletetext(#wer[0], "0 " | "1" | "2" | "3 " | "4" | "5" | "6 " | "7" | "8" | "9"); sleep(10);
if(readtext (NUM | MARK, #Text[0], 14, 3, -1,-1,-1,#CT[0],-1, 5, 50, 522,234, 713,261, as)>0)
{for(n=0; n<2; n++){strcpy(#wer[siz], Text[n]); siz=size(#wer[0]);} deletetext(#wer[0], " " | "-" ); pz=formatsn(format(#wer[0]));}
N[z]=pz;
Npow[z2]=pz;
z=z+2;
z2++;;
sendmouse(LEFT, 380, 520, as); pause(rand(1100, 2000));
goto v; |
|
|
Zireael |
Отправлено: 08 Февраля, 2019 - 01:15:53
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: при втором обращении exe вылетает
99% это выход за пределы массива. Код не весь так что ничего определённого не сказать.
К примеру:
CODE:N[z]=pz;
Npow[z2]=pz;
z=z+2;
Если объявлено N[2], то при первом обращении z будет 0, т. е. N[0] нормально, а при следующем z равно 2 и N[2] это уже ошибка. |
|
|
Adomb |
Отправлено: 08 Февраля, 2019 - 09:23:32
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Kibor пишет: Что со скобками?
{ 3
} 2
Сюда не дописал скобку, в скрипте она есть.
Массивы инициализированы.
Скрипт большой, вынес эту часть с распознаванием в цикле в отдельный скрипт , собрал exe, без добавления
CODE:deletetext(#wer[0], "0 " | "1" | "2" | "3 " | "4" | "5" | "6 " | "7" | "8" | "9"); sleep(10);
Заработало. Не вылетает. Всё, что в этой функции с другими функциями в скрипте не связано, не перекликается. Но хоть убей, полный скрипт в Киборе работает без deletetext, а в собранном exe вылетает. Сидел, уже от балды убрал в начале скрипта строку
CODE:external(VOID, "mouse_event", "mouse_event", "user32.dll");
собрал ехе без deletetext и он заработал, перестал вылетать.
Вернул external - перестал работать. Вставил deletetext - опять заработал.
(Добавление)
Вобщем подитожу.
Вся эта катавасия, как оказалось была из-за немодального диалога.
Вернул на место external, убрал ненужный deletetext.
В начале скрипта создаётся диалог, убрал его, скрипт в exe заработал.
Вернул диалог, вставил команду после его отработки destroydialog(0) и собранный exe заработал.
В Киборе скрипт работает с неубитым диалогом. А exe вылетает.
Каким образом неубитый диалог повлиял на собранный exe непонятно. Exe работал с неубитым диалогом, но нельзя было подключать external. |
|
|
|