mkdir

Тема в разделе "WASM.BEGINNERS", создана пользователем hakeem, 24 авг 2008.

  1. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Как использовать функцию mkdir в асме?
    И можно ли вообще?
     
  2. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    нет такой фукции, используй CreateDirectory
     
  3. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Спасибо
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Есть такая функция, только не в kernel32, а в msvcrt. Соответственно для masm нужно подлинковывать msvcrt.lib, а для fasm импортировать из msvcrt.dll.
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    дык это рунтайм, и она в итоге и вызовет CreateDirectory =)
     
  6. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Еще раз спасибо, с CreatDirectory разобрался , не хотелось лишний раз создавать тему вы бы не могли объяснить как создать файл (**.bmp например)
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    hakeem
    Разумеется CreateFile :)))

    Например:
    Код (Text):
    1. .data
    2.     File_Name db "MyBMP.bmp", 0
    3. .code
    4.     invoke CreateFile, offset File_Name, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
     
  8. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Y_Mur
    Последним идет хэндл файла?
     
  9. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Файлик создается, а просмотр не доступен...
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Последним идет описатель временного файла, на основе которого создается текущий. Обычно этот описатель равен NULL. Описатель создаваемого файла возвращается в качестве значения функции.
     
  11. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Phantom_84
    Если нужно создать файл из содержимого буфера обмена, нужно вставить его описатель, верно?
     
  12. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Стало быть вот так:

    Код (Text):
    1. ; читаем из буфера
    2.  invoke OpenClipboard,  hWnd
    3.  invoke GetClipboardData, CF_BITMAP
    4. ; в eax - указатель на буфер с данными
    5.  mov hBitmap,eax
    6. ;создаем файл **.bmp
    7.  invoke CreateFile, offset File_Name, GENERIC_READ or GENERIC_WRITE, 0, 0,\
    8.  CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,hBitmap
    Если так то:

     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    hakeem
    Мда... Ред бредкий... Последний параметр к CreateFile в Вашем случае вообще не нужно использовать. В него передаются только хэндлы уже открытых файлов, атрибуты которых Вы хотели бы приписать создаваемому файлу. Вам необходим только доступ для записи (GENERIC_WRITE). Для записи в файл - WriteFile. Недоступен просмотр, потому что файл на самом деле пуст, и к тому же Вы хэндл не закрыли.
    P.S. MSDN в помощь... причем по всем вышеупомянутым в теме вопросам.
     
  14. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Значит в моем случае я использую комбинацию CreateFile,WriteFile,CloseHandle ?
     
  15. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    hakeem
    Да. Но, как я уже написал, всё равно MSDN в помощь. Потому как GetClipboardData тоже не указатель на данные возвращает.
     
  16. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    MSDN конечно классная штука, но когда с английским не ахти...
    Еще один вопрос

    Код (Text):
    1.  BOOL WriteFile(
    2.   HANDLE hFile,                    // дескриптор файла
    3.   LPCVOID lpBuffer,                // буфер данных
    4.   DWORD nNumberOfBytesToWrite,     // число байтов для записи
    5.   LPDWORD lpNumberOfBytesWritten,  // число записанных байтов
    6.   LPOVERLAPPED lpOverlapped        // асинхронный буфер
    7. );
    hFile- мне даст CreateFile
    А по остальному я немножко не в понятках...

    Код (Text):
    1. lpBuffer
    2.  
    3. [in] Указатель на буфер, содержащий данные, которые будут записаны в файл.
    4. nNumberOfBytesToWrite
    5.  
    6. nNumberOfBytesToWrite
    7.  
    8. [in] Число байтов, которые будут записаны в файл.
    9. Значение нуля определяет пустую операцию записи. Поведение пустой операции записи зависит от лежащей в основе файловой системы. Чтобы сократить или продлить файл, используйте функцию SetEndOfFile.
    10.  
    11. Операции записи в именованном канале по всей сети ограничены 65 535 байтами.
    12.  
    13. lpNumberOfBytesWritten
    14.  
    15. [out] Указатель на переменную, которая получает число записанных байтов. Функция WriteFile устанавливает это значение в  нуль перед выполнением какой-либо работы или выявлением ошибок.
    16.  
    17. lpOverlapped
    18.  
    19. [in] Указатель на структуру OVERLAPPED. Эта структура требуется тогда, если параметр hFile создавался с флажком FILE_FLAG_OVERLAPPED.
     
  17. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Где взять эти lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten и lpOverlapped ?
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    hakeem
    Хм... Вам лучше начать с азов. Либо пробовать разбираться самому, пользуясь желательно англо-русским словарём, а не переводчиком.
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    lpOverlapped у тебя будет NULL или 0 ;)
    lpNumberOfBytesWritten - адрес переменной в которой функция вернёт тебе результат - сколько байт она смогла записать по факту. Делается это так:
    .data?
    NumberOfBytesWritten dd ?
    а при вызове WriteFile укажешь offset NumberOfBytesWritten

    А вот lpBuffer, nNumberOfBytesToWrite соответсвенно адрес и размер того куска памяти который ты хочешь сбросить в файл - если ты записываешь свои данные то с этим, сам понимаешь, никаких проблем, но у тебя есть только handle чужого BitMap... К сожалению M$ не предусмотрела прямого и простого пути как получить по handle адрес структуры BITMAPINFO в которой эти данные содержатся (по крайней мере я такого пути не нашёл ;) так что предстоит тебе большая пляска с бубном - возьми для начала задачку попроще ;)

    Хотя в твоём случае обходной манёвр предусмотрен - нужно запрашивать в GetClipboardData не CF_BITMAP, а CF_DIB тогда получишь вместо непонятного handle нужный адрес BITMAPINFO но над её структурой тебе придётся помедитировать - поскольку картинка состоит из трёх блоков - заголовка, палитры и собственно изображения, которые вообще-то не обязаны располагаться в памяти последовательно, а могут быть раскиданы куда попало ;), а тебе это придётся собрать и записать в нужном порядке, добавив сигнатуру "BM" ;)

    ЗЫ: и не забывай про CloseClipboard ;)
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Y_Mur
    А? O_o А как же GlobalLock и GlobalSize?