2010-05-16 2 views
0

Я хочу передать указатель на процедуру в C++. Я пробовал передать этот LRESULT (*) (HWND, UINT, WPARAM, LPARAM) prc, но он не работал. Как это делается?Передайте указатель на proc как аргумент

Благодаря

HWND OGLFRAME::create(HWND parent, LRESULT(*)(HWND, UINT, WPARAM, LPARAM) prc) 
{ 
    if(framehWnd != NULL) 
    { 
     return framehWnd; 
     ZeroMemory(&rwc,sizeof(rwc)); 

    } 

}

К "она не работает" я имею в виду, что это ошибка синтаксиса.

from the compiler: 
Error 2 error C3646: 'prc' : unknown override specifier c:\users\josh\documents\visual studio 2008\projects\vectorizer project\vectorizer project\oglframe.h 10 
Error 5 error C3646: 'prc' : unknown override specifier c:\users\josh\documents\visual studio 2008\projects\vectorizer project\vectorizer project\oglframe.cpp 7 
Error 1 error C2146: syntax error : missing ')' before identifier 'prc' c:\users\josh\documents\visual studio 2008\projects\vectorizer project\vectorizer project\oglframe.h 10 
Error 4 error C2146: syntax error : missing ')' before identifier 'prc' c:\users\josh\documents\visual studio 2008\projects\vectorizer project\vectorizer project\oglframe.cpp 7 
Error 3 error C2059: syntax error : ')' c:\users\josh\documents\visual studio 2008\projects\vectorizer project\vectorizer project\oglframe.h 10 
Error 6 error C2059: syntax error : ')' c:\users\josh\documents\visual studio 2008\projects\vectorizer project\vectorizer project\oglframe.cpp 7 
+3

Показать некоторый код пожалуйста. –

+0

А также объясните, что вы подразумеваете под «это не сработало». Есть много разных способов, которыми он мог «не работать». –

+0

'ZeroMemory (& rwc, sizeof (rwc))' никогда не будет вызван из-за 'return framehWnd' над ним. –

ответ

0
HWND OGLFRAME::create(HWND parent, LRESULT(*prc)(HWND, UINT, WPARAM, LPARAM)) 

Вы также можете просто использовать тип WndProc:

HWND OGLFRAME::create(HWND parent, WNDPROC prc) 
+1

Не забывайте, что первой версии необходимо использовать соглашение о вызове 'CALLBACK'. –

0

Попробуйте это:

HWND OGLFRAME::create(HWND parent, LRESULT(*wndproc)(HWND, UINT, WPARAM, LPARAM)) 
{ 

} 
+0

Не забудьте, что в процедурах окна используется соглашение о вызове 'CALLBACK'. –

0

Чтобы объявить функцию, которая принимает указатель на функцию:

// Note the CALLBACK calling convention! 
HWND OGLFRAME::create(HWND parent, 
    LRESULT (CALLBACK *prc)(HWND, UINT, WPARAM, LPARAM)) 
{ 
    // ... 
} 

Чтобы передать указатель на функцию:

// Note the CALLBACK calling convention! 
LRESULT CALLBACK MyProc(HWND, UINT, WPARAM, LPARAM) 
{ 
    // ... 
} 

// Note the ampersand! 
oglframeinstance.create(hwnd, &MyProc); 
Смежные вопросы