Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Yashied

Старожил


Сообщения: 206
Благодарности: 88

Профиль | Отправить PM | Цитировать


Система не загружает в память более одной копии 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() ведь не ставится.

Отправлено: 21:25, 13-03-2010 | #12