Всё замечательно работает на локальной машине и в пределах одной сессии.
Но если я запускаю копии программы в разных тероминал сессиях (на Windows SErver 2003)- данные почему то не передаются.
И это логично. Объект файлового отображения связан со страничным СВАП-файлом. И видимо каждая терминал сессия имеет свой СВАП.
Вопрос: а какже обойти эту проблему ?
Код прилагается
Спасибо всем сочуствующим.
- Код: Выделить всё
' декларируем АПИ CreateFileMapping
Private Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Integer, ByVal lpFileMappigAttributes As Integer, ByVal flProtect As Integer, ByVal dwMaximumSizeHigh As Integer, ByVal dwMaximumSizeLow As Integer, ByVal lpName As String) As Integer
Private Declare Function MapViewOfFile Lib "kernel32" Alias "MapViewOfFile" (ByVal hFileMappingObject As Integer, ByVal dwDesiredAccess As Integer, ByVal dwFileOffsetHigh As Integer, ByVal dwFileOffsetLow As Integer, ByVal dwNumberOfBytesToMap As Integer) As IntPtr
' декларируем констатнты
Private Const PAGE_READWRITE As Integer = &H4
Private Const INVALID_HANDLE_VALUE As Integer = -1
' декларируем переменные
Private FileHandle As Integer ' это хэндл
Private SharePoint As IntPtr ' а это указатель на наше будущее место в памяти
Dim MemoryName As String ="MySharedMemory"
' имя области которую будем потом искать
FileHandle = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 128, MemoryName)
' Получаем указатель на это место в памяти
If Not FileHandle = 0 Then
SharePoint = MapViewOfFile(FileHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0)
Else
Return False
End If
' Теперь любая программа которая "знает" имя области -"MySharedMemory" - может получить этот адрес и следовательно читать/писать туда.