2017-08-27 14 views
6

मैं HWND से गुण प्राप्त करने का प्रयास कर रहा हूं। मुझे Using Window Properties से जानकारी का उपयोग किया गया है, लेकिन नीचे दिया गया उदाहरण मेरे लिए काम नहीं कर रहा है। मुझे अपना कोड संकलित करते समय एक त्रुटि मिल रही है।Enum HWND गुण C++

प्रकार के तर्क "BOOL (__stdcall *) (HWND hwndSubclass, LPCSTR lpszString संभाल hData)" प्रकार के पैरामीटर "PROPENUMPROCEXW" के साथ असंगत है

यहाँ मेरी कॉलबैक फ़ंक्शन है

BOOL CALLBACK PropEnumProcEx(HWND hwndSubclass, LPCSTR lpszString, HANDLE hData) { 
    return TRUE; 
} 

और इस मैं इसे कैसे उपयोग कर रहा हूँ

EnumPropsEx(hwnd, PropEnumProcEx, NULL); 

करता है किसी के पास कोई सुझाव है कि इसे कैसे ठीक किया जा सकता है?

+0

त्रुटि संदेश स्पष्ट नहीं हो सकता है। क्या आप इसे समझते हैं? –

उत्तर

4

LPCSTR lpszStringLPTSTR lpszString होना चाहिए। इस तर्क को एएनएसआई या यूनिकोड नल-टर्मिनेटेड स्ट्रिंग के लिए पॉइंटर स्वीकार करना चाहिए। PROPENUMPROCEXW इंगित करता है कि आप यूनिकोड एप्लिकेशन बना रहे हैं, इसलिए EnumPropsEx मैक्रो EnumPropsExW कॉल तक फैलता है ताकि आपको कॉलबैक को व्यापक स्ट्रिंग को एक तर्क के रूप में स्वीकार करने की आवश्यकता हो। आम तौर पर आपको हमेशा एपीआई कार्यों के यूनिकोड वेरिएंट को स्पष्ट रूप से कॉल करना चाहिए।

इसके अलावा आप अंतिम तर्क ULONG_PTR dwData खो रहे हैं।

तो अपने कॉलबैक देखो की तरह करना चाहिए:

BOOL CALLBACK 
PropEnumProcEx(HWND hwndSubclass, LPTSTR lpszString, HANDLE hData, ULONG_PTR dwData) 
{ 
    return TRUE; 
} 
+2

** - 1 ** "' एलपीसीस्ट्रेट lpszString' 'LPTSTR lpszString' होना चाहिए" बहुत ही असहज सलाह है। 'टी' मैक्रोज़ का समय 1995 और 2000 के बीच था। 2000 में हमें यूनिकोड के लिए परत मिला, जिससे मैक्रोज़ अप्रचलित हो गया। आज हमारे उपकरण सिस्टम, विंडोज 9एक्स के लिए निष्पादन योग्य भी नहीं बना सकते हैं, जो मैक्रोज़ लक्षित हैं। गैर विरासत कोड के लिए उनका उपयोग जारी रखने के लिए यह पागलपन है। –

+0

@ चीयर्संधथ.-अल्फ यह स्वीकार्य है अगर यह कोड एएनएसआई संस्करण में भी बनाया जाना चाहिए। और मेरे उत्तर में एपीआई कॉल के यूनिकोड वेरिएंट का उपयोग करना पसंद करने के लिए सुझाव शामिल है। – VTT

+1

@VTT: एएनएसआई के रूप में भवन की सिफारिश न करें। कुछ पाठक आपको गंभीरता से ले सकते हैं। फिर आप उनके लिए समस्याएं बनाते हैं। गलत कार्य स्वीकार करें। जवाब ठीक करें। –

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