Что нового

Получить адрес функции через GetProcAddress

erlik

Продвинутый
Сообщения
317
Репутация
84
Вызов данной функции -
Код:
_WinAPI_GetProcAddress
- у меня всегда возвращает 0. При любых библиотеках и названиях функций. Где я тут туплю?
Код:
GetFuncAddress(@SystemDir & '\user32.dll', 'GetAsyncKeyState')

Func GetFuncAddress($sModulePath, $sFuncName)
	
	Local $hDll, $fCloseDll = False
	$hDll = _WinAPI_GetModuleHandle($sModulePath)
	
	If Not $hDll Then
	   $hDll = DllOpen($sModulePath)
	   $fCloseDll = True
	EndIf
	
	If $hDll Then
		Local $iAddress = _WinAPI_GetProcAddress($hDll, $sFuncName)
		If @error = 0 Then
			ConsoleWrite($sModulePath & "|$hDll=" & $hDll & "|$iAddress=0x" & $iAddress & "|" & $sFuncName & @CRLF)
		Else
			ConsoleWrite("Error|" & $sModulePath & "|$hDll=" & $hDll & "|$iAddress=0x" & $iAddress & "|" & $sFuncName & @CRLF)
		EndIf
	
	    If $fCloseDll  Then
	       DllClose($hDll)
	    EndIf
    EndIf
    
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Это ошибка в функции _WinAPI_GetProcAddress(), "wstr" вместо "str".

Код:
Func _WinAPI_GetProcAddress($hModule, $sProc)

	Local $TypeOfProc = 'uint_ptr'

	If IsString($sProc) Then
		$TypeOfProc = 'str'
	EndIf

	Local $Ret = DllCall('kernel32.dll', 'ptr', 'GetProcAddress', 'ptr', $hModule, $TypeOfProc, $sProc)

	If (@error) Or (Not $Ret[0]) Then
		Return SetError(1, 0, 0)
	EndIf
	Return $Ret[0]
EndFunc   ;==>_WinAPI_GetProcAddress
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
Yashied
Спасибо :smile: Теперь все работает.
 
Верх