"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
MFC 에서 GetFileVersionInfoSize 함수의 헤더 파일은 어떻게 되는지 간략히 알아보았습니다.

질문 >
MFC 에서 GetFileVersionInfoSize 함수의 헤더 파일은 어떻게 되나요?
답변 >
GetFileVersionInfoSize 함수는 Windows API의 버전 정보(Version Information) 관리 함수 중 하나로, VersionHelpers.h 또는 Windows.h 헤더 파일을 포함해야 합니다.
📌 필요한 헤더 파일
#include <windows.h>
#include <VersionHelpers.h>
그러나 대부분의 경우 VersionHelpers.h 없이도 windows.h 만 포함하면 GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue 함수를 사용할 수 있습니다.
🛠 컴파일을 위한 추가 라이브러리
이 API는 Version.lib 라이브러리를 필요로 하므로, 링커 설정에서 해당 라이브러리를 추가해야 합니다.
1. 코드에서 직접 추가:
#pragma comment(lib, "Version.lib")
2. Visual Studio에서 링커 설정 추가:
- 프로젝트 속성 (Project Properties)
- 링커 (Linker) → 입력 (Input) → 추가 종속성 (Additional Dependencies)
- "Version.lib" 추가
🎯 최종 예제 (헤더 포함)
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
#pragma comment(lib, "Version.lib")
void GetProductInfo(LPCTSTR szFilePath)
{
DWORD dwHandle;
DWORD dwSize = GetFileVersionInfoSize(szFilePath, &dwHandle);
if (dwSize == 0)
{
_tprintf(_T("GetFileVersionInfoSize failed: %lu\\n"), GetLastError());
return;
}
BYTE* pVersionInfo = new BYTE[dwSize];
if (!GetFileVersionInfo(szFilePath, 0, dwSize, pVersionInfo))
{
_tprintf(_T("GetFileVersionInfo failed: %lu\\n"), GetLastError());
delete[] pVersionInfo;
return;
}
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *pLangInfo;
UINT uLen;
if (!VerQueryValue(pVersionInfo, _T("\\\\VarFileInfo\\\\Translation"), (LPVOID*)&pLangInfo, &uLen))
{
_tprintf(_T("VerQueryValue for Translation failed\\n"));
delete[] pVersionInfo;
return;
}
TCHAR szSubBlock[256];
StringCchPrintf(szSubBlock, 256, _T("\\\\StringFileInfo\\\\%04x%04x\\\\ProductName"), pLangInfo->wLanguage, pLangInfo->wCodePage);
LPTSTR szProductName = nullptr;
if (VerQueryValue(pVersionInfo, szSubBlock, (LPVOID*)&szProductName, &uLen))
{
_tprintf(_T("ProductName: %s\\n"), szProductName);
}
StringCchPrintf(szSubBlock, 256, _T("\\\\StringFileInfo\\\\%04x%04x\\\\ProductVersion"), pLangInfo->wLanguage, pLangInfo->wCodePage);
LPTSTR szProductVersion = nullptr;
if (VerQueryValue(pVersionInfo, szSubBlock, (LPVOID*)&szProductVersion, &uLen))
{
_tprintf(_T("ProductVersion: %s\\n"), szProductVersion);
}
delete[] pVersionInfo;
}
int main()
{
TCHAR szFilePath[MAX_PATH];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
GetProductInfo(szFilePath);
return 0;
}
✅ 결론
- 헤더 파일: <windows.h> 포함
- 라이브러리: "Version.lib" 추가 필요
- 기능: 실행 파일의 ProductName 및 ProductVersion 가져오기
이제 컴파일하면 정상적으로 실행될 것입니다. 🚀
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com