Код (Text): include '%fasm%/win64ax.inc' section '.code' executable start: sub rsp,8 mov [lpFileOp.fFlags],FOF_SILENT + FOF_NOCONFIRMATION macro del a { mov [lpFileOp.wFunc],FO_DELETE invoke RtlZeroMemory,x,MAX_PATH invoke ExpandEnvironmentStrings,\ '%ProgramFiles(x86)%\MAGIX\Movie_Edit_Pro_MX_Premium_Download_Version\',x,MAX_PATH invoke lstrcat,x,a mov [lpFileOp.pFrom],x invoke SHFileOperation,lpFileOp } del 'xX' del 'zZ' invoke Sleep,NULL exit: invoke ExitProcess,NULL FO_DELETE = 3 FOF_SILENT = 4 FOF_NOCONFIRMATION = 10h section '.data' readable writeable x rd MAX_PATH struct SHFILEOPSTRUCT hwnd dq NULL wFunc dq NULL pFrom dq NULL pTo dq NULL fFlags dq NULL fAnyOperationsAborted dq NULL hNameMappings dq NULL lpszProgressTitle dq NULL ends lpFileOp SHFILEOPSTRUCT Всёли нормально, что тут оптимизировать можно? Всмысле чтобы потом в огромной программе это не конфликтовало с другими переменными.. Кстати, может лучше вынести из макроса: mov [lpFileOp.wFunc],FO_DELETE Я просто как бы привязать хотел определённый флаг к макросу, но с другой стороны наверное нет необходимости его инициализировать каждый раз? А почему RtlZeroMemory не прописан в импорте kernel.dll и всёравно работает? В (RTL) много хорошего но другие функи не работають, к сожалению. А заставить их нельзя? Небось в тасме они определены.
Semiono Не всё. Макрос нужно убрать. Вы абсолютно не различаете, когда нужно использовать макросы, а когда процедуры. Прописан.
тоесть макрос заменить на процедуру... хм.. просто я высказался не так, иначе бы и не работало, но вот жаль что из kernel.lib не достаточно всё прописанно)
Semiono Иначе при каждом обращении к макросу код будет дублироваться, и бинарник будет набит повторяющимися участками кода. Чего конкретно не хватает? kernel32 не так уж много Rtl-функций содержит (да и те все в ntdll форвардит). Сомневаюсь, что под "не достаточно" имеется в виду RtlCaptureStackBackTrace.
1. Понятно! Спасибо! 2. Не уверен, я мало функций знаю и всё что нравиться собираю. Порой хламу много. Мне вот Strsafe Functions тоже понравились, и тоже облом Strsafe.h Да вот посмотрел, там в RTL много строковых функций тоже, мнеб не помешало Изначально у меня код просто дублировался прямо без макроса ))) Обажаю RtlZeroMemory! Теперь можно вообще одну переменную гонять по всему коду, это то что я давно искал. invoke RtlZeroMemory,x,MAX_PATH Или это не совсем хорошо? Думаю нормально! С макросами и RtlZeroMemory,x код на 90% уменьшился! Класс! Попробую ещё на процедуры заменить.
Semiono В ntdll есть много чего для работы со строками. А так это сишный рантайм, конечно, представленный в самой strsafe.h. Уже в третий раз линкую здесь этот сайт. Если чего-то не хватает в официальной поставке, то имеет смысл посмотреть там.