c++ - Datatype convertion problems -
कुछ दिन पहले मैंने MSYS / Mingw के साथ एक Win32 API स्टैकट्र्रेस कार्यान्वयन के लिए एक प्रश्न पोस्ट किया है:
डीएलएल के स्पष्ट भार के साथ संकेत सही समाधान था इसलिए मैंने इस संकेत के बारे में Win32 CaptureStackBackTrace एपीआई तंत्र का उपयोग करके एक स्टैकट्र्रेस को लागू करने की कोशिश को पुनः आरंभ किया है। डीएलएल का लोडिंग ठीक काम करता है:
// RTLCapture संदर्भ फ़ंक्शन लोड करें: हिस्टाइन kernel32 = LoadLibrary ("Kernel32.dll"); अगर (kernel32! = NULL) {std :: cout & lt; & lt; "Kernel32.dll से विधि लोड करने का प्रयास करें: कैप्चरस्टैकबैकट्रेस" & lt; & lt; std :: endl; टाइपिंग यूफ़ोएट (* कैप्चरस्टैक बैक ट्रेस टाइप) (यूएलओंग फ्रेम्सटोस्क, यूओएलएंड फ्रेम्सटोकैप्चर, शून्य * बैक्रेस, यूलॉन्ग * बैकट्र्रेसहैश); CaptureStackBackTraceType func = (CaptureStackBackTraceType) GetProcAddress (कर्नेल 32, "RtlCaptureStackBackTrace"); अगर (func == NULL) {std :: cout & lt; & lt; "कैप्चर स्टैकबैकट्रेस के लिए हैंडल नहीं दर्ज किया जा सका! डेमो रोकें!" & Lt; & lt; std :: endl; FreeLibrary (kernel32); Kernel32 = NULL; Func = NULL; बाहर निकलने के (1); } शून्य * सरणी [63]; Int I, num = 0; Std :: cout & lt; & lt; "CaptureStackBackTrace को कॉल करने का प्रयास करें ..." & lt; & lt; std :: endl; Num = CaptureStackBackTraceType (1, 32, array, NULL);}
लेकिन अगर मैं कैप्चरस्टैक बैकट्रेस टाइप विधि को कॉल करता हूं और प्रकार कनवर्तन समस्याओं में चल रहा हूं, तो मुझे परेशानी हो रही है:
stacktrace .cpp: 138: त्रुटि: कार्यात्मक कास्ट अभिव्यक्ति सूची को परिसर और एक्सप्रेशन स्टैकट्र्रेस सीपीपी: 138 के रूप में माना जाता है: त्रुटि: मुझे लगता है कि यह समस्या MSYS / मिनजीडब्ल्यू और डीएलएल परिभाषाओं के बीच भिन्न प्रकार के कारण हो सकती है USHORT स्पष्ट रूप से परिभाषित USHORT अहस्ताक्षरित कम का कोई प्रभाव नहीं है। क्या कोई भी विचार है कि मैं इस समस्या को कैसे हल कर सकता हूं? इन्हें भी देखें अंतिम टेंडर, आपको फ़ंक्शन पॉइंटर USHORT (*) (ULONG, ULONG, voi d *, ULONG *) से < कोड> USHORT '
func
का उपयोग करके फ़ंक्शन को शामिल करने की आवश्यकता है। तो यह num = func (1, 32, array, NULL) होना चाहिए;
अन्यथा, आप एक अज्ञात ऑब्जेक्ट प्रकार CaptureStackBackTraceType
बनाने की कोशिश कर रहे हैं और इसे कनवर्ट करने का प्रयास कर रहे हैं एक int
चूंकि रूपांतरण मौजूद नहीं है, कंपाइलर एक त्रुटि जारी कर रहा है।
Comments
Post a Comment