Добрый вечер.
Ситуация такова: У меня есть поле для ввода строки (editbox1). Значения, которые я туда ввожу, сохраняются в dBuffer. При нажатии на кнопку, мне нужно вывести в другое поле (editbox3) ту же строку, что я ввёл в первое, посимвольно, с помощью команды loop (это обязартельно, такова суть задания). Процедуру нажатия на кнопку организовал, так что остаётся разобраться с выводом в editbox3.
Кусок кода:
val1 dd ?
len dd ?
rez db 'вы ввели символы: '
invoke lstrcpy, ADDR Buffer, ADDR rez ; копируем в Buffer (не в dBuffer) строку 'вы ввели символы: '
invoke lstrlen, ADDR dBuffer ; узнаём длину введённой в editbox1 строки
mov len,eax ; сохраняем её
mov ecx,len ; заносим длину в регистр ecx
mov esi,offset dBuffer ;загружаем в регистр esi адрес dBuffer'а (буффера, в котором введённая строка)
metka:
mov edx,[esi] ;заносим в регистр edx первый символ, находящийся в esi (по идее первый символ, который был введён в editbox)
invoke lstrcat, ADDR Buffer, edx ; прибавляем к строке, содержащейся в буффере, тот символ, который сейчас в edx.
inc esi ; увеличиваем esi на 1 (по-идее переходим к следующему символу)
loop metka ;на метку, если ecx = 0
invoke GetDlgItem,hWin,ID_EDIT3 ; получаем дискриптор другого editbox'a, в который нужно всё это записать
invoke SetWindowText,eax,ADDR Buffer ; Записываем в editbox всё, что "накопилось" в Buffer'е
При запуске программы, ввода строки в editbox1 и нажатии на кнопку вылетает ошибка windows: "программа работает неправильно" и программа закрывается.
Пожалуйста, подскажите, в чём дело ?