У меня есть эта функция:
GwBoolean win95_draw_button(DRAWITEMSTRUCT *pDrawParam, GwCore *pCore)
{
...
assert(pDrawParam);
HDC hDC = pDrawParam->hDC;
...
}
И я получаю это исключение:
Исключение: нарушение прав чтения. pDrawParam был 0x2B4FE760. Исключение указывает на HDC hDC = pDrawParam->hDC;
HD C определяется следующим образом:
HANDLE HDC
value: void*
и этот hD C на правильном сайте, как это:
HD C hD C в struct tagDRAWITEMSTRUCT Здесь вызывается функция win95_draw_button:
GwBoolean GwPushButton::EventHandler(GwEvent *ev)
{
long long lParam;
GwWord wParam;
GwWindowParams(&wParam, &lParam);
...
// Painting in Win95 Style
win95_draw_button ((DRAWITEMSTRUCT*)(long long)(lParam),this);
}
GwWindowParams определяется следующим образом (если это помогает):
PREEXPORT void POSTEXPORT GwWindowParams(GwWord* nwParam, long long* nlParam);
И объявление выглядит так:
void GwWindowParams(GwWord *nwParam, long long *nlParam)
{
GwFUNCTION_TRACE(GwWindowParams(GwWord *,long long*), 0)
*nwParam = paramw;
*nlParam = paraml;
}
paraml определяется так: static long paraml = 0L;
Я настоятельно предполагаю, что проблема здесь в lParam. Парам имеет тип долго. Я уже пытался и изменил его на долго, но я все еще получил исключение. Я думаю, это также не правильный способ (DRAWITEMSTRUCT*)(long long)(lParam)
конвертировать в DRAWITEMSTRUCT*
.