Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с хуком Direct X в MinGW. 
:(
    Опции темы
CynicRus
Дата 14.8.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



Приветствую уважаемых форумчан. Пытаюсь сделать хук на EndScene при помощи apihijack. В ApiHijack.h описаны структуры:

Код

struct SFunctionHook
{
    char* Name;         // Function name, e.g. "DirectInput8Create".
    DWORD* HookFn;       // Address of your function.
    DWORD* OrigFn;       // Stored by HookAPICalls, the address of the original function.
};

struct SDLLHook
{
    // Name of the DLL, e.g. "DDRAW.DLL"
    char* Name;

    // Set true to call the default for all non-hooked functions before they are executed.
    bool UseDefault;
    void* DefaultFn;

    // Function hook array.  Terminated with a NULL Name field.
    SFunctionHook* Functions[];
};


и при попытке использовать данную структуру:
Код

SDLLHook D3DHook =
{
    "DDRAW.DLL",
    false, NULL,
    {
        { "DirectDrawCreateEx", MyDirectDrawCreateEx },
        { NULL, NULL }
    }
};
 я получаю ошибку: error: too many initializers for 'SFunctionHook* [0]'. Собственно - каким образом разрешить данную проблему?
PM MAIL   Вверх
korian
Дата 14.8.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: нет
Всего: 17



Цитата(CynicRus @  14.8.2012,  11:27 Найти цитируемый пост)
 я получаю ошибку: error: too many initializers for 'SFunctionHook* [0]'. Собственно - каким образом разрешить данную проблему? 

То что я нашел, выглядет вот так
Код

struct SDLLHook
{
    // Name of the DLL, e.g. "DDRAW.DLL"
    char* Name;
    // Set true to call the default for all non-hooked functions before they are executed.
    bool UseDefault;
    void* DefaultFn;
    // Function hook array.  Terminated with a NULL Name field.
    SFunctionHook Functions[];
};

Что соответствует вот этому:
Код

struct SDLLHook
{
    // Name of the DLL, e.g. "DDRAW.DLL"
    char* Name;
    // Set true to call the default for all non-hooked functions before they are executed.
    bool UseDefault;
    void* DefaultFn;
    // Function hook array.  Terminated with a NULL Name field.
    SFunctionHook Functions[0];
};

Соответственно вы не можете запихать в Functions больше элементов, чем 0.
А использоваться это, по идее, должно вот так:
Код

   int function_count = 2;
   void* mem_ptr = malloc(sizeof(SDLLHook) + sizeof(SFunctionHook) * function_count);
   SDLLHook *D3DHookPtr = (SDLLHook *)mem_ptr;
   D3DHookPtr->Name = "DDRAW.DLL";
   D3DHookPtr->UseDefault = false;
   D3DHookPtr->DefaultFn = NULL;
   D3DHookPtr->Functions[0] = { "DirectDrawCreateEx", MyDirectDrawCreateEx, NULL };
   D3DHookPtr->Functions[1] = { NULL, NULL, NULL };



Это сообщение отредактировал(а) korian - 14.8.2012, 14:35
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.