2012-05-10 12 views
5

जब मैं MinGW 4.6.2EnumChildWindows और लैम्ब्डा

EnumChildWindows(hwnd, [](HWND, LPARAM) -> BOOL { return TRUE; }, 0); 

पर निम्नलिखित संकलन करने की कोशिश मैं

error: cannot convert '<lambda(HWND, LPARAM)>' 
to 'ENUMWINDOWSPROC {aka int (*)(HWND__*,long int)}' 
for argument '2' to 'BOOL EnumChildWindows(HWND, ENUMWINDOWSPROC, LPARAM)' 

मैं गलत तरीके से लैम्ब्डा घोषणा कर रहा हूँ, या काम करने के लिए नहीं जा रहा यह बस है मिल सकता है? कॉलबैक के एमएस परिभाषा

BOOL CALLBACK EnumChildProc(
    __in HWND hwnd, 
    __in LPARAM lParam 
); 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633493%28v=vs.85%29.aspx

समस्या पैदा कर बुला सम्मेलन है है?

+0

http://stackoverflow.com/questions/2935201/will-c0x-support-stdcall-or-extern-c-capture-nothing-lambdas संबंधित नहीं है। –

उत्तर

6

BOOL कॉलबैक EnumChildProc (...)

समस्या है यही कारण है, कॉलबैक मैक्रो कार्य करने के लिए __stdcall विशेषता लागू होता है डिफ़ॉल्ट सेटिंग से बुला सम्मेलन को बदलने के लिए। अधिकांश कार्यक्रमों में __cdecl कौन सा है। वैश्विक सेटिंग (/ Gz संकलन विकल्प) को बदलने के अलावा, आप अपने लैम्ब्डा के लिए कॉलिंग सम्मेलन को नियंत्रित नहीं कर सकते हैं। इससे आपकी अधिक देखभाल के मुकाबले बहुत अधिक दुष्प्रभाव हो सकते हैं, इस लम्दा को छोड़ दें।

64-बिट कोड बीटीडब्ल्यू में कोई समस्या नहीं है।

+1

@luksy: यह भी ध्यान दें कि वीसी ++ 11 आपके लिए यह स्पष्ट रूप से संभालता है (यानी, यह बस काम करता है)। – ildjarn

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