2011-01-07 2 views
0

우승 API가 아닌 함수를 우회하기 위해 우회 우회 라이브러리를 사용하고 싶습니다. 이 함수는 Qt 라이브러리 (QtGui4.dll)의 일부입니다. 나는에 대한 함수 서명 설정 얼마나 궁금 : 나는이 함께 가야했다MS 우회 API 함수를 우회하는 우회 도서관

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

을하고 오류의 평소 점유율을받은 요구 사항의 약간의 설명은 흥미뿐만 ​​아니라 다음과 같습니다

void (QPainter * real_drawText)(const QPointF & position, const QString & text) = drawText 
내가 시도 유전자의 제안에서에 다음과 같은, 그래서

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

:

이 은 윈도우 API에서, TextOut에 대한처럼 무엇

,
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

0

비 정적 멤버 함수는 매개 변수로 암시적인 this 포인터를 가져 오므로 우회시 선언해야합니다.

관련 문제