На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: SCINER, B.V.
  
    > Как работать с Memory-mapped files , FileMapping
      Народ кто работал с этим в VB? Очень надо хоть какой-нибудь пример.
        Необходимые константы и прочие апи
        ExpandedWrap disabled
          Private Declare Function CreateFileMapping& Lib "kernel32" Alias "CreateFileMappingA" _
          (ByVal hFile As Long, lpFileMappingAttributes As SECURITY_ATTRIBUTES, ByVal _
          flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As _
          Long, ByVal lpName As String)
          Private Declare Function OpenFileMapping& Lib "kernel32" Alias "OpenFileMappingA" _
          (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As _
          String)
          Private Declare Function MapViewOfFile& Lib "kernel32" (ByVal hFileMappingObject As _
          Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal _
          dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long)
          Private Declare Function UnmapViewOfFile& Lib "kernel32" (ByVal lpBaseAddress As Long)
          Private Declare Function CloseHandle& Lib "kernel32" (ByVal hObject As Long)
          Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes As Long)
           
          Const INVALID_HANDLE_VALUE = -1
          Const PAGE_READWRITE = 4&
          Const STANDARD_RIGHTS_REQUIRED = &HF0000
          Const SECTION_QUERY = &H1
          Const SECTION_MAP_WRITE = &H2
          Const SECTION_MAP_READ = &H4
          Const SECTION_MAP_EXECUTE = &H8
          Const SECTION_EXTEND_SIZE = &H10
          Const SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SECTION_QUERY Or SECTION_MAP_WRITE Or SECTION_MAP_READ Or SECTION_MAP_EXECUTE Or SECTION_EXTEND_SIZE
          Const FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS
           
          Private Type SECURITY_ATTRIBUTES
               nLength As Long
               lpSecurityDescriptor As Long
               bInheritHandle As Long
          End Type


        создать файл так:
        ExpandedWrap disabled
          Dim hGlobalData As Long
          Dim hMapFile As Long
          Dim sa As SECURITY_ATTRIBUTES
          sa.bInheritHandle = 0
          sa.lpSecurityDescriptor = 0
          sa.nLength = Len(sa)
          hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, sa, PAGE_READWRITE, 0, Len(GlobalData), "Название файла")
          If hMapFile = 0 Then MsgBox ("Ошибка создания файла")
          hGlobalData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, LenB(наши данные))
          If hGlobalData = 0 Then MsgBox ("Ошибка доступа к файлу")


        Теперь есть два хэндла - файла и области памяти. Работать с ними штатными апи, есть в гиде.
        К примеру записать в файл, используя хэндл памяти можно так:
        ExpandedWrap disabled
          CopyMemory ByVal hGlobalData, наши данные, LenB(наши данные)


        прочитать так:
        ExpandedWrap disabled
          CopyMemory наши данные, ByVal hGlobalData, LenB( hGlobalData)


        Добавлено в :
        а. потом после использование надо закрывать :

        ExpandedWrap disabled
          UnmapViewOfFile hGlobalData
          CloseHandle hMapFile
        Сообщение отредактировано: Vasya2000 -
          Вот пример от Эпплмана. Взято с форума vbstreets.ru

          Это сообщение было перенесено сюда или объединено из темы "Помощь по Memory-mapped"
          Прикреплённый файлПрикреплённый файл (66.96 Кбайт, скачиваний: 263)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0197 ]   [ 16 queries used ]   [ Generated: 27.04.24, 16:51 GMT ]