프로시저 시작 지점GetSystemTimePreciseAsFileTime을(를) DLL KERNEL32.에서 찾을 수 없습니다
프로그램 설치시 위 이미지와 같이 '프로시저 시작 지점GetSystemTimePreciseAsFileTime을(를) DLL KERNEL32.에서 찾을 수 없습니다'라는 오류가 발생하는 경우가 있다.
이러한 `GetSystemTimePreciseAsFileTime` 함수와 관련된 오류는 대개 해당 함수가 Windows 운영 체제의 특정 버전에서만 제공되기 때문에 발생하는 것으로, 해당 함수는 고해상도의 시간 정보를 제공하기 위해 Windows 8 이상에서만 사용할 수 있으며, 이전 버전에서는 지원되지 않기 때문이다.
이 오류가 발생하는 주된 원인과 해결 방법은 다음과 같다.
1. 운영 체제 버전 문제
- `GetSystemTimePreciseAsFileTime`은 Windows 8 이상에서만 사용할 수 있으므로, 만약 Windows 7이나 그 이전 버전에서 프로그램을 실행하려고 할 경우, 해당 함수를 찾지 못해 오류가 발생하게 된다. 그러므로 Windows 7 을 지원하는 버전을 찾아봐야할 것이다.
2. 컴파일 시 운영 체제 버전 미설정
- 만약 코드가 여러 버전의 Windows에서 실행되도록 설계되었다면, 운영 체제의 기능을 조건부로 호출하도록 작성해야 한다. 프로그램을 컴파일할 때 최소 지원 운영 체제를 지정하지 않으면, 구 버전에서 호환되지 않는 함수 호출로 인해 실행 중 오류가 발생할 수 있다.
- 호환성 체크를 추가하여 `GetSystemTimePreciseAsFileTime`을 호출하기 전에 해당 함수가 사용 가능한지 운영 체제 버전을 확인하는 코드를 추가하는 것이 좋다.
- Windows 7 등 하위 버전과의 호환성이 필요하다면, 대신 `GetSystemTimeAsFileTime` 함수 등 대체함수를 사용하는 것이 좋다. 이 함수는 모든 Windows 버전에서 지원되며, 고해상도의 시간은 아니지만 시스템의 현재 UTC 시간을 반환하는 역할을 한다.
예를 들어, 아래와 같이 운영 체제 버전에 따라 다른 함수를 호출하도록 작성할 수 있습니다.
#include <windows.h>
#include <iostream>
void GetSystemTimeCompatible() {
FILETIME ft;
if (IsWindows8OrGreater()) {
GetSystemTimePreciseAsFileTime(&ft);
} else {
GetSystemTimeAsFileTime(&ft);
}
// 시간 정보를 출력하는 등의 처리
}
이렇게 하면 Windows 8 이상에서는 `GetSystemTimePreciseAsFileTime`을 호출하고, 그 외의 경우에는 `GetSystemTimeAsFileTime` 을 호출해 오류를 방지할 수 있다.
`IsWindows8OrGreater()`와 같은 함수는 Windows SDK에서 제공되며, 운영 체제의 버전을 확인하는 데 유용하다. 이를 통해 코드가 다양한 버전의 Windows에서 호환되도록 구성할 수 있다.