2011-01-07 66 views
0

我想用windows derours庫繞行一個非win api函數。該函數是Qt庫(QtGui4.dll)的一部分。我想知道我將如何設置函數簽名爲:MS Detours Library,迂迴非贏api函數

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

} 

但是得到了錯誤,'函數式轉換爲內置類型只能使用一個參數。

所以無論如何,他們說有點當衆羞辱是良好的靈魂,我的靈魂必須具有最佳時機......

感謝。

回答

0

何種類型的功能是fntype爲非:

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

,但它看起來像他們所期望的是WINIAPI = __stdcall C函數來代替。你可能會想,如果你可以把你的函數包裝成C函數。

+0

對不起基因,這對我來說都是新鮮的,所以我會問,我該怎麼做? – flavour404 2011-01-08 01:21:53

0

請記住,非靜態成員函數確實會得到一個隱含的this指針作爲參數,您必須在繞行時聲明。