2010-05-16 5 views
0

Je souhaite passer un pointeur sur une procédure en C++. J'ai essayé de passer ce LRESULT (*) (HWND, UINT, WPARAM, LPARAM) prc mais cela n'a pas fonctionné. Comment cela est-il fait?Passer un pointeur sur un proc en tant qu'argument

Merci

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

    } 

}

Par "ça n'a pas marché" Je veux dire qu'il est une erreur de syntaxe.

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

Afficher un code s'il vous plaît. –

+0

Et aussi expliquer ce que vous voulez dire par "ça n'a pas marché". Il y a beaucoup de manières différentes dans lesquelles il aurait pu "ne pas fonctionner". –

+0

'ZeroMemory (& rwc, sizeof (rwc))' ne sera jamais appelé à cause de 'return framehWnd' au dessus. –

Répondre

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

Vous pouvez aussi utiliser le type de WNDPROC:

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

N'oubliez pas que la première version doit utiliser la convention d'appel 'CALLBACK'. –

0

Essayez ceci:

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

} 
+0

N'oubliez pas que les procédures de fenêtre utilisent la convention d'appel 'CALLBACK'. –

0

Pour déclarer une fonction qui accepte un pointeur de fonction:

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

Pour passer un pointeur de fonction:

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

// Note the ampersand! 
oglframeinstance.create(hwnd, &MyProc); 
Questions connexes