2008年10月20日
DLLのバージョンを返す処理
DLLのバージョンリソース情報のファイルバージョンを取得して返すだけのつまらないコード
HINSTANCE g_hDllInstance; BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { g_hDllInstance = (HINSTANCE)hModule; … } char * __stdcall GetVersion(void) { TCHAR strPath[MAX_PATH]; GetModuleFileName(g_hDllInstance, strPath, MAX_PATH); return(ReadVersion(strPath)); } static char *ReadVersion(char *strFname) { static char strVersion[(5 + 1) * 4]; DWORD dwSize = GetFileVersionInfoSize(strFname, 0); if (dwSize == 0) { return(""); } void *buffer = malloc(dwSize); if (buffer == NULL) { return(""); } GetFileVersionInfo(strFname, 0, dwSize, (LPVOID)buffer); LPVOID retBuffer = NULL; UINT uiLength = 0; VerQueryValue((const LPVOID)buffer, "\\", &retBuffer, &uiLength); VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)retBuffer; DWORD dwFileVerMS = verInfo->dwFileVersionMS; DWORD dwFileVerLS = verInfo->dwFileVersionLS; sprintf(strVersion, "%d.%d.%d.%d", dwFileVerMS >> 16, dwFileVerMS & 0xFFFF, dwFileVerLS >> 16, dwFileVerLS & 0xFFFF); free(buffer); return(strVersion); }
バージョンリソースのファイルバージョンを取得するだけなのに以外に面倒くさかったのでメモ
雑な部分は適当に
あ、あとコレだけのためにversion.libをリンクする必要もあったりする…う~ん
TrackBack URL :
