से मेरे पास एक ऐसा एप्लिकेशन है जिसे WinXP और Vista64 दोनों पर चलाने की आवश्यकता है। मेरे प्रोग्राम को Vista पर काम करने के लिए QueryFullProcessImageName() की आवश्यकता है लेकिन XP पर नहीं।रन-टाइम चेक विफलता # 0 लोडिंग QueryFullProcessImageName kernel32.dll
मैं kernel32.dll के माध्यम से QueryFullProcessImageName() (स्थिर रूप से लिंक करने के बजाय) लोड करने का प्रयास करता हूं ताकि एक ही निष्पादन योग्य WinXP और Vista दोनों पर चल सके। कोड है कि यह लोड करता है:
//only gets called on vista
bool LoadQueryFullProcessImageName()
{
HMODULE hDLL = LoadLibrary("kernel32.dll");
if (!hDLL) return(0);
//Now use pointer to get access to functions defined in DLL
fpQueryFullProcessImageName = (LPQueryFullProcessImageName)GetProcAddress(hDLL, "QueryFullProcessImageNameA"); //ANSI version
if (!fpQueryFullProcessImageName)
return false;
return true;
}
typedef
typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
__in HANDLE hProcess,
__in DWORD dwFlags,
__out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
__inout PDWORD lpdwSize
);
दुर्भाग्य से, जब समारोह सूचक dereferenced है मैं Vista पर एक रन समय त्रुटि मिलती है:
रन-टाइम जांच विफलता # 0 - ईएसपी का मूल्य फ़ंक्शन कॉल में ठीक तरह से सहेजा नहीं गया था। यह आमतौर पर एक कॉलिंग कन्वेंशन के साथ घोषित फ़ंक्शन को कॉल करने का परिणाम होता है जिसमें एक अलग कॉलिंग सम्मेलन के साथ घोषित फ़ंक्शन पॉइंटर होता है।
टाइपपीफ सीधे .h फ़ाइल से है इसलिए मुझे समझ में नहीं आ रहा है कि यह गड़बड़ क्यों कर रहा है। कोई मदद? मैंने कई प्रकार की कोशिश की है लेकिन कोई भाग्य नहीं है।