Тема: Получить базовый адрес модуля [SAMP]
Здравствуйте. Есть функция:
GetModuleBaseAddr(ModuleName, ProcessID)
{
if !(hSnapshot := DllCall("CreateToolhelp32Snapshot", "uint", 0x8, "uint", ProcessID))
return "Error in CreateToolhelp32Snapshot"
NumPut(VarSetCapacity(MODULEENTRY32, (A_PtrSize = 8 ? 48 : 32) + (A_IsUnicode ? 1032 : 516), 0), MODULEENTRY32, "uint")
if !(DllCall("Module32First", "ptr", hSnapshot, "ptr", &MODULEENTRY32))
return "Error in Module32First", DllCall("CloseHandle", "ptr", hSnapshot)
ME32 := {}
while (DllCall("Module32Next", "ptr", hSnapshot, "ptr", &MODULEENTRY32)) {
if (ModuleName = StrGet(&MODULEENTRY32+ (A_PtrSize = 8 ? 48 : 32), 256, "cp0")) {
ME32.Addr := NumGet(&MODULEENTRY32+20)
ME32.Size := NumGet(MODULEENTRY32, (A_PtrSize = 8 ? 32 : 24), "uint")
}
}
return ME32, DllCall("CloseHandle", "ptr", hSnapshot)
}
И пример её использования:
ModBase := GetModuleBaseAddr("user32.dll", DllCall("GetCurrentProcessId"))
MsgBox % "modBaseAddr:`t" ModBase.Addr "`nmodBaseSize:`t" ModBase.Size " bytes"
Всё прекрасно работает. Но вот получить базовый адрес samp.dll не получается:
WinGet, PID, PID, GTA:SA:MP
ModBase := GetModuleBaseAddr("samp.dll", PID)
MsgBox % "modBaseAddr:`t" ModBase.Addr "`nmodBaseSize:`t" ModBase.Size " bytes"
В чем ошибка? Заранее спасибо.