| Сейчас на форуме: bartolomeo, asfa, _MBK_ (+7 невидимых) | 
| eXeL@B —› Вопросы новичков —› Рисуем в чужом Direct3D приложении | 
| Посл.ответ | Сообщение | 
| 
 | 
Создано: 15 ноября 2011 22:50  · Личное сообщение · #1 Всем привет! Есть игра, которая использует DirectDraw7. Понадобилось выводить в углу окна этой игры некоторую информацию. Например FPS. Я перехватил вызов функции DirectDrawCreateEx и дальше незнаю в какую сторону двигаться. Прикрепляю лог сделанный с помощью DirectX Logger. Помогите пожалуйста информацией, примерами.   de6d_15.11.2011_EXELAB.rU.tgz - game.exe.log.rar
![]()  | 
| 
 | 
Создано: 16 ноября 2011 03:56 · Поправил: MasterSoft  · Личное сообщение · #2 битком инфы, по твоему запросу в гугле первая ссылка. или гугл сломался? если ищешь готовое, на sf поищи такси - фрапсоаналог) а вообще я бы на твоём месте смотрел в сторону оверлеев.сорцы тож найти можно если поискать. Хотя всё эт не совсем по тематике форума.   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 16 ноября 2011 04:44  · Личное сообщение · #3  | 
| 
 | 
Создано: 16 ноября 2011 09:14 · Поправил: MasterSoft  · Личное сообщение · #4  | 
| 
 | 
Создано: 18 ноября 2011 15:38  · Личное сообщение · #5 Code: 
   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 18 ноября 2011 21:18 · Поправил: Dynamic  · Личное сообщение · #6 punxer cпасибо. Очень помогли Ваши куски кода. С помощью функции HookCOM успешно перехватил IDirectDraw7_SetCooperativeLevel и IDirectDraw7_CreateSurface. По той же схеме собрался перехватить IDirectDrawSurface7_GetAttachedSurface. Функция выглядит так: Code: 
 Но при запуске приложение крашится. Посмотрел я в отладчике на эту функцию: Code: 
 Перед выполнением RETN 0C верхушка стека выглядит так: Code: 
 При выполнении RETN 0C попадаем на 0018FB9C и падаем. Стоит изменить функцию к виду: Code: 
 и приложение нормально работает через MyIDirectDrawSurface7_GetAttachedSurface функцию. Code: 
 Подскажите пожалуйста в чем может быть проблема. Компилирую с помощью VS2010. ![]()  | 
| 
 | 
Создано: 24 ноября 2011 17:10  · Личное сообщение · #7 Из моего скромного опыта по перехвату API усвоил, что в процедурах обработки перехваченных функций не стоит использовать локальные переменные. Так же по возможности стоит использовать ассемблерные вставки аля CMP:JXX вместо конструкций IF:ENDIF   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 24 ноября 2011 21:53  · Личное сообщение · #8 Dynamic Проблема в прототипе: Code: 
 А надо: Code: 
 В вашем объявлении на один параметр меньше, поэтому stdcall соглашение не очищает полностью стек, и вместо адреса возврата на вершине стека этот параметр, что приводит к иксепшену. foxmail пишет: Из моего скромного опыта по перехвату API усвоил, что в процедурах обработки перехваченных функций не стоит использовать локальные переменные. Это неправда. Их юзать как раз можно, никаких проблем нет. Да и быть не может, только если вы не создаёте какой-то огромный локальный буфер, который настолько здоровенный, что вызывает переполнение стэка. ----- Stuck to the plan, always think that we would stand up, never ran.   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 24 ноября 2011 22:29 · Поправил: Dynamic  · Личное сообщение · #9 ARCHANGEL, если бы ![]() Вы написали прототип функции DirectDraw7_CreateSurface, а не IDirectDrawSurface7_GetAttachedSurface. Вот что я нашел в ddraw.h: Code: 
 Code: 
 msdn: Так что проблема не в прототипе. ![]()  | 
| 
 | 
Создано: 24 ноября 2011 22:31  · Личное сообщение · #10  | 
| 
 | 
Создано: 26 ноября 2011 19:15  · Личное сообщение · #11 Приветствую Логгер Директикса из первого поста поддерживает плагины, так что вручную перехваты ставить не надо. надо написать обработчик и указать ему, возможно этот путь будет более легким для топикстартера http://blackninja2000.narod.ru/rus/directx_logger.html   | Сообщение посчитали полезным: Dynamic | 
| 
 | 
Создано: 29 ноября 2011 00:32 · Поправил: punxer  · Личное сообщение · #12 Dynamic Код перехвата покажите весь Откуда устанавливается перехват pSurf->GetAttachedSurface? Куда указывает lplpThis Code: 
 Из моего скромного опыта по перехвату API усвоил, что в процедурах обработки перехваченных функций не стоит использовать локальные переменные. Так же по возможности стоит использовать ассемблерные вставки аля CMP:JXX вместо конструкций IF:ENDIF Это отнють не так. И как правило в таких перехватах на с++ в ассемблере нет особой нужды вообще ![]()  | 
| eXeL@B —› Вопросы новичков —› Рисуем в чужом Direct3D приложении | 

 







 Для печати