2012-11-25 35 views
2

我有一個正在編譯爲DLL的項目,以及手動添加的資源文件。 我正在尋找Win32 API,它可以幫助我找到資源文件並從中獲取信息和數據(使用C++)。用於打開和從資源文件獲取數據的Win32 api

例如 - 讓公司名稱或版本..

誰能幫助我呢?

謝謝。

+0

試圖扭轉?你能解釋一下嗎?! –

+3

FindResource,LoadResource,SizeofResource,LockResource,UnlockResource FreeResource。 [[「WIN32 DLL資源加載」](https://www.google.com/search?client=safari&rls=zh-CN&q=WIN32+DLL+Resource+Loading&ie=UTF-8&oe=UTF-8)上約有一百萬次網頁點擊) – WhozCraig

+0

是的,當我在VS2010中右鍵單擊項目時,我添加了:add-> resource-> Version。然後我得到了公司名稱,版本,產品名稱和更多的窗口...我想寫一個功能,爲檢驗可以給我的公司名稱..但我不明白我如何可以輸入資源文件並獲取它..我認爲這是一個winapi ..但我只是無法找到它 – user1386966

回答

1

呼叫下面通過TEXT( 「公司名稱」)的功能lpszVersionType '

#pragma comment(lib, "version.lib") 
BOOL GetVersionString(LPCTSTR lpszModuleFileName, LPCTSTR lpszVersionType, LPTSTR lpszVersionString) 
{ int i, j; 
unsigned long u; 
LPTSTR pBlock, pTmpVersion; 
TCHAR buf[_MAX_PATH]; 
BOOL bRet = FALSE; 

struct LANGANDCODEPAGE 
{ WORD wLanguage; 
    WORD wCodePage; 
} *lpTranslate; 

if ((i = GetFileVersionInfoSize(lpszModuleFileName, &u)) == 0) // !! 
    return FALSE; 
i++; 
pBlock = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, i * sizeof(TCHAR)); 
if (pBlock == NULL) // !! 
    return FALSE; 

if (GetFileVersionInfo(lpszModuleFileName, u, i, pBlock)) 
{ VerQueryValue(pBlock, TEXT ("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, (UINT *)&u); // // Read the list of languages and code pages 
    j = (int)(u/sizeof(struct LANGANDCODEPAGE)); 
    for (i = 0; i < j; i++) 
    { wsprintf(buf, TEXT ("\\StringFileInfo\\%04x%04x\\%s"), lpTranslate[i].wLanguage, lpTranslate[i].wCodePage, lpszVersionType); 
     VerQueryValue(pBlock, buf, (void **)&pTmpVersion, (UINT *)&u); 
     if (u > 0) 
     { lstrcpy(lpszVersionString, pTmpVersion); 
      bRet = TRUE; 
      break; 
     } 
    } 
} 

HeapFree(GetProcessHeap(), 0, pBlock); 

return bRet; 
} 

`

+0

謝謝,我應該把什麼放在裏面:lpszVersionString?並且第一個參數是DLL的路徑> – user1386966

+0

lpszVersionString是輸出參數 例如 char szCompanyName [_MAX_PATH]; GetVersionString(lpszModuleFileName,TEXT(「CompanyName」),szCompanyName); –

+0

我總是得到:在函數「struct_ver * _cdecl ...」中引用的錯誤LNK2019Lun解析的外部符號_GetFileVersionInfo @ 16是什麼意思?難道我做錯了什麼? – user1386966