Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Неясные глюки Добавлено: 11.08.04 17:53  

Автор вопроса:  NovichoK

Ответить

  Ответы Всего ответов: 34  

Номер ответа: 16
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #16
Добавлено: 13.08.04 00:13
>Iczelion'а, урок 13
 - Довольно скундо. Но всё же вроде удалось кое что почерпать.
 А ну ка проверь как я понял.
 Значит когда нам нужно получить данные из файла нужно использовать MapViewOfFile, котрая вернёт указатель, который можно потом использовать как LPSTR (ASCIIZ PTR в PB)?
 Во всяком случае у Iczelion'а этот указатель передаётся потом в WriteFile параметром LPCVOID lpBuffer.
 Или этот указатель расчитан только на файловые API?

Ответить

Номер ответа: 17
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #17 Добавлено: 13.08.04 08:51
Нет, ну если тебе надо считать весь файл, то нет смысла его считывать построчно. Примерно

Dim Stroka As Long
Dim hFile As Byte
hFile = FreeFile
Open FileName For Input As hFile
Stroka = Input(LOF(hFile), hFile)
Close hFile
'MsgBox Stroka

Ежели нужно разбить построчно - можно использовать Split.

Ответить

Номер ответа: 18
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #18
Добавлено: 13.08.04 11:59
Несколько мутно.
MapViewOfFile отображает файл на память и возвращает куда она это сделала. Причем это явно не ASCIIZ. А WriteFile Iczelion использует по отношению не к маппированному файлу:
invoke CreateFileMapping, hFileRead,NULL,PAGE_READONLY,0,0,NULL
mov hMapFile,eax
а WriteFile здесь:
invoke WriteFile,hFileWrite,pMemory,eax,ADDR SizeWritten,NULL
Причем hFileWrite нигде не маппируется.
С указателем можно работать как и с обычной памятью, такие "операции с памятью" Винда будет преобразовывать в операции ввода/вывода из/в файл(а).

Ответить

Номер ответа: 19
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #19
Добавлено: 13.08.04 12:17
MapViewOfFile, отображает не обязательно файл...

Ответить

Номер ответа: 20
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #20
Добавлено: 13.08.04 14:17
Sharp,
 Ты не внимателен.
invoke MapViewOfFile,hMapFile,FILE_MAP_READ,0,0,0
mov pMemory,eax

 Как видишь WriteFile использует указатель pMemory, полученный с помощью MapViewOfFile.

Ответить

Номер ответа: 21
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #21
Добавлено: 13.08.04 18:16
WriteFile использует адрес памяти для записи в любом случае. В данном случае он использует указатель на отмаппированный в память файл. А MapViewOfFile отображает в память все, что может быть названо файлом с той или иной степенью натяжки :) Не сказано ведь, что дисковый файл.

Ответить

Номер ответа: 22
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #22
Добавлено: 13.08.04 18:49
 Ладно, похоже что ты сам в этом не разбирался.

 Но раз я уже начал копать, то наверное прекращать нерационально.
 С WriteFile и так всё понятно. Это файловая функция и проблем с ней по идее быть не должно.
 А как на счёт строковых функций? Если я захочу например найти последовательность байт?
 Сработает ли что то типа сунуть pMemory в ESI, а искомую строку в EDI и потом в цикле выполнить CMPS?
 Именно про строковые API я и спрашивал. Как думаешь сработают?

Ответить

Номер ответа: 23
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #23
Добавлено: 13.08.04 18:58
Я, наверно, не так понял твой вопрос? Программисту абсолютно не нужно знать, отмаппирован ли файл в память или просто считан стандартными средствами, он может работать с памятью, как и обычно - единственное отличие состоит в том, что запись в файл при записи в память идет сразу.

Ответить

Номер ответа: 24
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #24
Добавлено: 13.08.04 19:22
 Я правильно понял? Значит при маппировании файла он как бы превращается в память и любая функция работы с памятью его указатель обработает корректно?

Ответить

Номер ответа: 25
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #25 Добавлено: 14.08.04 05:40
>Значит при маппировании файла он как бы превращается в память и любая
>функция работы с памятью его указатель обработает корректно?
Именно так. Цитата из книги Стивена Романа:
"Windows способна интерпретировать файл на диске так, как если бы он
был частью памяти. Для этого часть файла отображается на область
адресного пространства виртуальной памяти. Связанные с памятью
API-функции, подобные CopyMemory, могут затем использоваться для
просмотра и изменения содержимого файла на диске. Такой файл
называется отображаемым в память (memory-mapped file)."

Ответить

Номер ответа: 26
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #26
Добавлено: 14.08.04 11:25
<=Alex=>,
 Привет. А как насчёт ссылки на эту книгу?

Ответить

Номер ответа: 27
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #27
Добавлено: 14.08.04 11:27
Люди, а давайте модуль напишем с мапингом. Ведь если реально повысить скорость работы с большими файлами, то ему цены не будет.

Ответить

Номер ответа: 28
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #28
Добавлено: 14.08.04 12:21
А зачем, проще чем на АПИ все-равно не сделаешь, т.к. все параметры "нужные", к примеру строка object name, или буфер...

Да там а если еще и пару файлов нужно отразить, это надо будет еще с массивом "настроек" возиться...

Ответить

Номер ответа: 29
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #29
Добавлено: 14.08.04 12:55
 Нет, на API не проще. Проще как раз на VB.

Ответить

Номер ответа: 30
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #30
Добавлено: 14.08.04 15:51
Я давно собирался сделать типа fopen, чтобы не писать эти корявые Open For As, но какие-то проблемы возникли с ресайзом памяти для записи. Но если делать только для чтения/записи с фиксированным размером, то можно устроить.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам