Есть значит строка типа TCHAR и есть переменная с именем файла типа db. Как склеить это в: "строка имя файла"
А почему у меня в fname меняются данные из за lstcat ??? .play: mov eax,fname invoke lstrcat,xPl,eax invoke mciExecute,eax jmp .finish
Отладчика нет. Проверяю вот так: .play: mov ebx,xPl invoke MessageBox,[hwnd],xPl,title,MB_OK invoke lstrcat,ebx,fname ; ;invoke mciExecute, invoke MessageBox,[hwnd],fname,title,MB_OK invoke MessageBox,[hwnd],eax,title,MB_OK invoke MessageBox,[hwnd],xPl,title,MB_OK invoke MessageBox,[hwnd],ebx,title,MB_OK jmp .finish Дак вот до lstrcat , xPl нормальная, а три последни меседж бокса вывадят одинаковое значение и равно оно результату ф-и lstrcat
скачай отладчик - будет легче! LPTSTR lstrcat( LPTSTR lpString1, // address of buffer for concatenated strings LPCTSTR lpString2 // address of string to add to string1 ); создай буффер, сначала туда закинь 1 строку, потом вторую. Меняется потому что строка слишком большая и байты записываются поверх!
.data str1 db 'Hello',0 str2 db 'WoRlD',0 buf db 256 dup(0) .code start: INVOKE lstrcat,OFFSET buf,OFFSET str1 INVOKE lstrcat,OFFSET buf,OFFSET str2 INVOKE MessageBox,0,OFFSET str1,0,MB_OK INVOKE MessageBox,0,OFFSET str2,0,MB_OK INVOKE MessageBox,0,OFFSET buf,0,MB_OK INVOKE ExitProcess,0 end start
Делаю вот так .play: invoke lstrcat,buf,xPl invoke lstrcat,buf, fname mov eax,buf invoke mciExecute,eax jmp .finish Этот кусок вызывается в программе несколько раз, а мне надо, чтоб на второй, третий... взовы buf не менялся. Его както надо отчищать перед следующим вызовом. Как ето сделать???
чтобы поверх не записывалось? можешь добавить строки: mov al,0 mov edi,OFFSET buf stosb вниз. Эти строки поместят 0 (нульбайт) вместо первого символа buf, что будет считаться, конфом строки