1 (изменено: Alectric, 2016-01-21 23:18:37)

Тема: AHK: Нестандартное использование DLLCall

Не первый раз натыкаюсь на запись такого вида:

DllCall(NumGet(NumGet(this+0)+3*A_PtrSize)...

Что это за DLLка? Или это адрес в память? Если адрес, то какого процесса?
Пример:

VA_ISimpleAudioVolume_SetMasterVolume(this, ByRef fLevel, GuidEventContext="") {
    return DllCall(NumGet(NumGet(this+0)+3*A_PtrSize), "ptr", this, "float", fLevel, "ptr", VA_GUID(GuidEventContext))
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

2

Re: AHK: Нестандартное использование DLLCall

Это читается адрес функции, реализующей какой-то метод в интерфейсе какого-то COM-объекта. Эти адреса хранятся в списке (VTable), отсюда и смещение до нужного. Непосредственно по указателю на объект (this) расположен указатель на этот самый VTable. Т.е.


pVTable := NumGet(pObject)
pFunc := NumGet(pVTable + Offset)