Что нового

Совместное использование ресурса, созданного функцией _WinAPI_CreateFileMapping

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
В теме http://autoit-script.ru/index.php/topic,2733.0.html показан пример как один процесс передает данные другому. передача данных односторонняя .
один процесс создает область данных
Код:
_WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping')

другой подключается к ней
Код:
_WinAPI_OpenFileMapping('MyFileMapping')


я использовал несколько иначе - оба процесса создают область обмена данными
первый:
Код:
#include <WinAPIEx.au3>
OnAutoItExitRegister('_exit')
Global $hMapping, $pAddress, $tData
$hMapping = _WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping')
$pAddress = _WinAPI_MapViewOfFile($hMapping)
$tData = DllStructCreate('wchar[1024];wchar[1024]', $pAddress)
$Form1 = GUICreate("Окно 1", 309, 90, 100, 100)
$Button1 = GUICtrlCreateButton("Button1", 168, 56, 75, 25)
$Input1 = GUICtrlCreateInput("Первый", 32, 24, 217, 21)
$label = GUICtrlCreateLabel('', 32, 50, 100, 21)
GUISetState(@SW_SHOW)

While 1
	$string = DllStructGetData($tData, 2)
	GUICtrlSetData($label, $string)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
		Case $Button1
			$Text = GUICtrlRead($Input1)
			DllStructSetData($tData, 1, $Text)
	EndSwitch
WEnd

Func _exit()
	_WinAPI_UnmapViewOfFile($pAddress)
	_WinAPI_CloseHandle($hMapping)
EndFunc   ;==>_exit

второй:
Код:
#include <WinAPIEx.au3>
OnAutoItExitRegister('_exit')
Global $hMapping, $pAddress, $tData
$hMapping = _WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping')
$pAddress = _WinAPI_MapViewOfFile($hMapping)
$tData = DllStructCreate('wchar[1024];wchar[1024]', $pAddress)
$Form1 = GUICreate("Окно 2", 309, 90, 100, 300)
$Button1 = GUICtrlCreateButton("Button1", 168, 56, 75, 25)
$Input1 = GUICtrlCreateInput("Второй", 32, 24, 217, 21)
$label = GUICtrlCreateLabel('', 32, 50, 100, 21)
GUISetState(@SW_SHOW)


While 1
	$string = DllStructGetData($tData, 1)
	GUICtrlSetData($label, $string)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
		Case $Button1
			$Text = GUICtrlRead($Input1)
			DllStructSetData($tData, 2, $Text)
	EndSwitch
WEnd

Func _exit()
	_WinAPI_UnmapViewOfFile($pAddress)
	_WinAPI_CloseHandle($hMapping)
EndFunc   ;==>_exit

оба процесса получают друг от друга информацию,могут ее обработать и передать обратно
насколько корректно использование функции в таком виде? в документации по CreateFileMapping я мало что понял. английским владею на уровне интуиции :smile:
а машинный перевод оставляет желать лучшего.
я некоторое время тестировал подобный вариант и не столкнулся с какими либо трудностями.
 
Верх