Что нового

[Процессы] _MemGlobalLock не возвращает указатель в дочернем процессе

firex

AutoIT Гуру
Сообщения
943
Репутация
208
script_1.au3
Код:
#include <Memory.au3>

$hMemory = _MemGlobalAlloc( 4, $GHND )
If $hMemory <> 0 Then
	$hLock = _MemGlobalLock( $hMemory )
	If $hLock <> 0 Then
		$tStruct = DllStructCreate( "dword", $hLock )
			DllStructSetData( $tStruct, 1, 14 )

		_MemGlobalUnLock( $hMemory )
	EndIf

	Run( @ScriptDir & "\script_2.exe -" & Int( $hMemory ), @ScriptDir )
	MsgBox( 64, "Mem", "hMemory=" & $hMemory )

	_MemGlobalFree( $hMemory )
EndIf


script_2.au3
Код:
#include <Memory.au3>

$hMemory = Ptr( StringRegExpReplace( $CmdLineRaw, "^.*-([0-9]+).*$", "\1" ) )
$hLock = _MemGlobalLock( $hMemory )

MsgBox( 16, "Error", "hLock=" & $hLock & @LF & _
		"hMemory=" & $hMemory & @LF & _
		"Error=" & @Error )

_MemGlobalUnLock( $hMemory )


Передаю второму скрипту указатель на объект созданный в первом скрипте, далее пытаюсь получить указатель на саму память используя _MemGlobalLock - и в результате ничего.

Раньше работал с такими объектами ( созданными самой системой ) -и проблем не возникало. Видимо тут все не так просто, может у кого есть идеи ( достаточно будет кинуть ссылку на нужную функцию (на msdn), так как подобных там множество ) ?

P.S. Второй скрипт нужно скомпилировать.


Добавлено:
Сообщение автоматически объединено:

Тема решена, что то я совсем ерунду тут накрутил. Все получилось путем топорного чтения процесса.
 
Верх