Tôi có một ứng dụng cần chạy cả trên WinXP và Vista64. Chương trình của tôi yêu cầu QueryFullProcessImageName() để làm việc trên Vista nhưng không phải trên XP.Kiểm tra thời gian chạy thất bại # 0 loading QueryFullProcessImageName từ kernel32.dll
Tôi cố gắng tải QueryFullProcessImageName() (thay vì liên kết tĩnh) thông qua kernel32.dll để cùng một tệp thực thi có thể chạy trên cả WinXP và Vista. Mã tải đó là:
//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 là
typedef WINBASEAPI
BOOL (*LPQueryFullProcessImageName)(
__in HANDLE hProcess,
__in DWORD dwFlags,
__out_ecount_part(*lpdwSize, *lpdwSize) LPSTR lpExeName,
__inout PDWORD lpdwSize
);
Thật không may, tôi nhận được một lỗi thời gian chạy trên Vista khi con trỏ hàm được dereferenced:
Run-Time Kiểm tra Failure # 0 - Giá trị của ESP không được lưu đúng cách trong một cuộc gọi hàm. Đây thường là kết quả của việc gọi một hàm được khai báo với một quy ước gọi bằng một con trỏ hàm được khai báo với một quy ước gọi khác.
Máy đánh chữ thẳng từ tệp .h nên tôi không thể hiểu tại sao nó lại rối tung lên. Bất kỳ giúp đỡ? Tôi đã thử rất nhiều biến thể nhưng không may mắn.