Система не загружает в память более одной копии Dll. В любом случае, вот еще один пример:
Код:
#Include <WinAPI.au3>
$hProc1 = _WinAPI_GetProcAddress(_WinAPI_GetModuleHandle(@SystemDir & '\user32.dll'), 'GetAsyncKeyState')
$hDll = DllOpen(@SystemDir & '\user32.dll')
$hProc2 = _WinAPI_GetProcAddress(_WinAPI_GetModuleHandle(@SystemDir & '\user32.dll'), 'GetAsyncKeyState')
DllClose($hDll)
$hProc3 = _WinAPI_GetProcAddress(_WinAPI_GetModuleHandle(@SystemDir & '\user32.dll'), 'GetAsyncKeyState')
ConsoleWrite($hProc1 & ' = ' & $hProc2 & ' = ' & $hProc3 & @CR)
Func _WinAPI_GetProcAddress($hModule, $sProc)
Local $Ret = DllCall('kernel32.dll', 'ptr', 'GetProcAddress', 'ptr', $hModule, 'str', $sProc)
If (@error) Or ($Ret[0] = 0) Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[0]
EndFunc ;==>_WinAPI_GetProcAddress
И почему все пытаются выставить значение в
Sleep() как можно больше.
Sleep(1) более чем достаточно. Вот простой тест:
Код:
GUICreate('')
GUISetState()
$Timer = TimerInit()
GUIGetMsg()
ConsoleWrite(TimerDiff($Timer) & @CR)
$Timer = TimerInit()
Sleep(1)
ConsoleWrite(TimerDiff($Timer) & @CR)
Получается, что
Sleep(1) тормозит программу в 1000(!) раз больше, чем
GUIGetMsg(). А когда используется GUI,
Sleep() ведь не ставится.