2011-01-07 31 views
0

Ich möchte die Windows-Umleitungen Bibliothek um eine Non-Win-API-Funktion Umleitung verwenden. Die Funktion ist Teil der Qt-Bibliothek (QtGui4.dll). Ich frage mich, wie ich die Funktion Signatur einrichten für:MS Detours Library, Umgehung nicht gewinnen API-Funktion

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

ich mit diesem gehen hatte und erhielt meine üblichen Anteil der Fehler, ein wenig Erklärung von Anforderungen wäre interessant auch:

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

Dies ist, was sie wie für TextOut aussehen, unter dem 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; 
} 

Also, von Genen Vorschlag im Anschluss an habe ich versucht:

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); 

} 

Aber der Fehler, 'eine Funktion-Stil-Konvertierung zu einem eingebauten Typ kann nur einen Parameter zu nehmen.

Wie auch immer, sagen, dass sie eine wenig öffentliche Demütigung für die Seele gut ist, muss meine Seele, die beste Zeit, die seine ...

Dank.

Antwort

0

Die Art Ihrer Funktionen ist FnType:

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

aber es sieht aus wie das, was sie erwarten, dass eine C-Funktion statt WINIAPI = __stdcall ist. Sie könnten denken, wenn Sie Ihre Funktion in eine C-Funktion einbinden können.

+0

Sorry Gene, das ist alles neu für mich, also werde ich fragen, wie würde ich das tun? – flavour404

0

Denken Sie daran, dass nicht statische Elementfunktionen einen impliziten Zeiger this als Parameter erhalten, den Sie beim Umweg deklarieren müssen.