2011-09-06 12 views
7

में LRESULT से WNDPROC को परिवर्तित नहीं कर सकता है मैं WinApi के साथ यह Win32 प्रोग्राम लिखने की कोशिश कर रहा हूं और मैं अटक गया हूं क्योंकि मुझे जो ट्यूटोरियल है, उसे कोई समस्या है।C2440 C++ WinApi

MainWindow.h:

class MainWindow 
{ 
    public: 
    MainWindow(HINSTANCE); 
    ~MainWindow(void); 

    LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM); 

    // [...] 

MainWindow.cpp:

MainWindow::MainWindow(HINSTANCE hInstance) : hwnd(0) 
{ 
    WNDCLASSEX WndClsEx; 
    // [...] 
    WndClsEx.lpfnWndProc = &MainWindow::WndProcedure; 
    // [...] 
} 

LRESULT CALLBACK MainWindow::WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) 
{ 
    // [...] 
} 

मैं संदर्भित किया जाना चाहिए MainWindow :: WndProcedure गलत है क्योंकि मैं हस्ताक्षर के बाद कर रहा हूँ बिल्कुल के रूप में ट्यूटोरियल का कहना है, तथापि कन्स्ट्रक्टर में lpfnWndProc लाइन एक संकलन-समय त्रुटि देता है:

त्रुटि C2440: '=': 'LRESULT (__stdcall MainWindow :: * से कनवर्ट नहीं किया जा सकता है *) (HWND, uint, wParam, lParam) wndproc '

+0

आपको वह त्रुटि किस त्रुटि पर मिल रही है? मुझे नहीं लगता कि यह आपके द्वारा पोस्ट की गई चीज़ों में है। – Mat

+4

रेमंड कैन्स [स्क्रैच प्रोग्राम] देखें (http://blogs.msdn.com/b/oldnewthing/archive/2005/04/22/410773.aspx) क्लास विधि में पारित विंडो संदेशों को प्राप्त करने के बेवकूफ तरीके के लिए (से विधि हस्ताक्षर में 'स्थिर' जोड़ा जाने के बाद अगले तार्किक प्रश्न का उत्तर दें)। – user786653

उत्तर

12

की जगह

LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM); 

static LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM); 

इस सूचक अपने समारोह कॉल में एक छिपा पैरामीटर है और यह घोषणा करके स्थिर इस सूचक अब एक पैरामीटर और दो के हस्ताक्षर नहीं है कार्य मैच

3

आप एक खिड़की प्रक्रिया के रूप में एक गैर स्थिर सदस्य समारोह उपयोग नहीं कर सकते' को '। यदि आप WndProcedure को static के रूप में घोषित करते हैं तो इसे संकलित करना चाहिए। एक गैर-सदस्य समारोह भी काम करेगा।

गैर स्थैतिक सदस्य कार्यों के स्थिर सदस्यों की तुलना में एक अलग हस्ताक्षर है। ऐसा इसलिए है क्योंकि उन्हें स्पष्ट रूप से परिभाषित पैरामीटर के अतिरिक्त एक अंतर्निहित this पैरामीटर प्राप्त होता है।

3

ऐसा इसलिए है क्योंकि आपका WNDProcedure फ़ंक्शन या तो वैश्विक फ़ंक्शन या स्थिर सदस्य फ़ंक्शन होना चाहिए।

संबंधित मुद्दे