MS Detours Library, обходная функция без выигрыша API - PullRequest
0 голосов
/ 08 января 2011

Я хочу использовать библиотеку обходов окон, чтобы обойти функцию api без выигрыша.Функция является частью библиотеки Qt (QtGui4.dll).Мне интересно, как бы я настроил сигнатуру функции для:

void QPainter::drawText ( const QPointF & position, const QString & text )

Я попробовал это сделать, и он получил свою обычную долю ошибок, было бы интересно также немного объяснить требования:

void (QPainter * real_drawText)(const QPointF & position, const QString & text) = drawText

Вот как они выглядят для TextOut под Windows API:

BOOL (WINAPI * Real_TextOut)(HDC a0, int a1, int a2, LPCWSTR a3, int a4) = TextOutW;
BOOL WINAPI Mine_TextOut(HDC hdc,int X,int Y,LPCWSTR text,int textLen)
{
BOOL rv = Real_TextOut(hdc, X, Y, text, textLen);

HWND hWindow = WindowFromDC(hdc);

SendTextMessage(hWindow, text);

return rv;
}

Итак, следуя предложению Джина, я попытался:

typedef void (QPainter::* Real_qp_drawText)(const QPointF & position, const QString & text);

void Mine_drawText(const QPointF & position, const QString & text)
{

    Real_qp_drawText(position,text);

}

НоЯ понял, что преобразование функционального стиля во встроенный тип может принимать только один параметр.

Так или иначе, они говорят, что небольшое публичное унижение полезно для души, моя душа должна быть лучшевремя ...

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 января 2011

Помните, что нестатические функции-члены получают неявный указатель this в качестве параметра, который вы должны объявить при обходе.

0 голосов
/ 08 января 2011

Тип ваших функций: FnType:

typedef void (QPainter::*FnType)(const QPointF &, const QString &);

но похоже, что вместо этого они ожидают функцию WINIAPI = __stdcall C. Вы можете подумать, можете ли вы обернуть свою функцию в функцию C.

...