Вот сижу парюсь. Есть такой код Код (Text): proc CopyToSystemDir pFileName locals .lpszFileName rb 100h endl pushad push 100h push .lpszFileName call [GetSystemDirectory] выйдет такая ошибка А если Код (Text): proc CopyToSystemDir pFileName locals .lpszFileName rb 100h endl pushad push 100h push [.lpszFileName] call [GetSystemDirectory] В чем же моя ошибка? И как в фасме буфер передать, блин не могу никак додуматься.
CR0ne lpszFileName у тебя должен быть размерности dd, тк это указатель, который ты передаешь фунции. Либо пиши push offset lpszFileName, если lpszFileName у тебя является буффером.
для локальных переменных нужно адрес вычеслить через LEA Код (Text): proc CopyToSystemDir pFileName locals .lpszFileName rb 100h endl pushad push 100h lea eax,.lpszFileName push eax call [GetSystemDirectory] только если ты переменную pFileName макроса не используешь, то зачем ее описывать?
на самом деле надо Код (Text): ... lea eax,[.lpszFileName] push eax ... Aspire, тут обсуждаецо фасм KiNDeR, проверьте прежде чем постедь. ошибки в Begginers ставят начинающих в затруднительное положение
Всё спасибо, прокатило. А ещё такой вопрос, можно ли как-то это проще сделать. А то постоянно писать Код (Text): lea ebx,[.lpszFileName] Чтобы адрес буфера передавать. Код получиться объёмным.
это относится только к адресам локальных переменных и к аргументам. Можешь написать простенький макрос.
И как будет выглядить это макрос Мне в голову приходит только Код (Text): macro addr arg { lea eax,[arg] } но всёравно придёться постоянно писать так Код (Text): addr .lpszFileName invoke GetSystemDirectory,eax,100h А проще как-нибудь можно??
Если подключаете win32ax.inc или win32wx.inc, тогда можно так: invoke GetSystemDirectory,addr .lpszFileName,100h
Так работает: Код (Text): include '%fasminc%\win32wx.inc' .code start: call main invoke ExitProcess,0 proc main locals lpzsFileName TCHAR 'Hello!',0 endl invoke MessageBox, 0, addr lpzsFileName, addr lpzsFileName, 0 ret endp .end start Попробуй без точки и/или заменить rb на db.
Твой пример не заработал у меня. Выдаёт ошибку. Пожет есть другие предложение?? Придёться тупо постояно вставлять lea