2010-05-16 63 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

請顯示一些代碼。 – 2010-05-16 12:26:28

+0

也解釋你的意思是「它沒有工作」。有許多不同的方式可以「不工作」。 – 2010-05-16 12:27:53

+0

'ZeroMemory(&rwc,sizeof(rwc))'永遠不會因爲它上面的'return framehWnd'而被調用。 – 2010-05-16 12:29:53

回答

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

你也可以只使用WNDPROC類型:

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

不要忘記第一個版本需要使用'CALLBACK'調用約定。 – 2010-05-16 12:40:18

0

試試這個:

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

} 
+0

不要忘記窗口過程使用'CALLBACK'調用約定。 – 2010-05-16 12:38:45

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