Прибавить к строке имя файла

Тема в разделе "WASM.BEGINNERS", создана пользователем wcools, 7 июн 2009.

  1. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Есть значит строка типа TCHAR и есть переменная с именем файла типа db. Как склеить это в: "строка имя файла"
     
  2. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    invoke lstrcat,addr ConnectionString, addr BasePath
    Экспорт из kernel32.dll.
     
  3. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    А почему у меня в fname меняются данные из за lstcat ???

    .play:
    mov eax,fname
    invoke lstrcat,xPl,eax
    invoke mciExecute,eax
    jmp .finish
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Боюсь даже спрашивать, но что видно в отладчике? lstrcat ну никак не влияет на второй операнд
     
  5. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Отладчика нет.
    Проверяю вот так:
    .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
     
  6. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    скачай отладчик - будет легче!

    LPTSTR lstrcat(

    LPTSTR lpString1, // address of buffer for concatenated strings
    LPCTSTR lpString2 // address of string to add to string1
    );

    создай буффер, сначала туда закинь 1 строку, потом вторую. Меняется потому что строка слишком большая и байты записываются поверх!
     
  7. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    .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
     
  8. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Ругается на OFFSET, что делать???
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    фасм? удали оффсет
     
  10. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Делаю вот так
    .play:
    invoke lstrcat,buf,xPl
    invoke lstrcat,buf, fname
    mov eax,buf
    invoke mciExecute,eax
    jmp .finish

    Этот кусок вызывается в программе несколько раз, а мне надо, чтоб на второй, третий... взовы buf не менялся. Его както надо отчищать перед следующим вызовом. Как ето сделать???
     
  11. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    чтобы поверх не записывалось?
    можешь добавить строки:

    mov al,0
    mov edi,OFFSET buf
    stosb

    вниз. Эти строки поместят 0 (нульбайт) вместо первого символа buf, что будет считаться, конфом строки
     
  12. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Спасибо большое, теперь работает.