- 0
Получить метод интерфейса по указателю на интерфейс, на готовом примере приложения DirectX
-
Похожий контент
-
- 1 ответ
- 512 просмотра
-
AppTethering не отправляет поток данных в Android-приложение
От Delpher-X,
- delphi
- delphi 10.3.3
- (и ещё 3 )
- 5 ответов
- 1 160 просмотров
-
- 24 ответа
- 5 788 просмотров
-
- 1 ответ
- 2 083 просмотра
-
Как изменить цвет фона или текста заголовка tstringgrid
От BelovAlex,
- tstringgrid
- firemonkey
- (и ещё 1 )
- 0 ответов
- 1 079 просмотров
-
- 0 ответов
- 1 155 просмотров
-
- 3 ответа
- 1 830 просмотров
-
- 0 ответов
- 1 441 просмотр
-
- 8 ответов
- 3 323 просмотра
-
- 11 ответов
- 3 058 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Pax Beach
Привожу пример готового FMX приложения, которое рисует на форме с помощью интерфейса IDirect3DDevice9.
В примере реализован вызов анонимного метода Present() интерфейса IDirect3DDevice9, имея ссылку на интерфейс и порядковый номер метода.
Данная реализация пригодится при установке ловушек (Hooks).
Вкратце, суть реализации такая:
Объявляю процедурный тип нужного метода
type TPresent9 = function(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData): HResult of object; stdcall;
Объявляю переменную этого типа
var PPresent: TPresent9; begin ... IntRefToMethPtr(d3d9Dev, PPresent, 17); PPresent(nil, nil, DParametrs.D3DPP.hDeviceWindow, nil);
Реализую процедуру получения метода интерфейса по номеру
procedure IntRefToMethPtr(const IntRef; var MethPtr; MethNo: Integer); type TVtable = array [0 .. 999] of Pointer; PVtable = ^TVtable; PPVtable = ^PVtable; begin // QI=0, AddRef=1, Release=2, etc TMethod(MethPtr).Code := PPVtable(IntRef)^^[MethNo]; TMethod(MethPtr).Data := Pointer(IntRef); end;
А теперь получаем метод интерфейса по его порядковому номеру и вызываем его
IntRefToMethPtr(d3d9Dev, PPresent, 17); PPresent(nil, nil, DParametrs.D3DPP.hDeviceWindow, nil);
Благодарю за оценку этого решения на StackOverflow.
Скачать пример: D3DDemo.zip
Ссылка на комментарий
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.