structprogress
;void getinfofromexeanddll(progress &proitem)
; dword dwsize = 0
; uint uisize = getfileversioninfosize(proitem.strfullpath, &dwsize);
if (0 ==uisize)
ptstr pbuffer = new
tchar[uisize];
if (null ==pbuffer)
memset((
void*)pbuffer, 0
, uisize);
//獲取exe 或 dll 的資源資訊,存放在pbuffer內
if (!getfileversioninfo(proitem.strfullpath, 0
, uisize, (pvoid)pbuffer))
langandcodepage *planguage = null; //
這裡這樣設定沒關係了。
uint uiothersize = 0
;
//獲取資源相關的 codepage 和language
if (!verqueryvalue(pbuffer, "
\\varfileinfo\\translation
",(pvoid*)&planguage, &uiothersize))
//重點
char* ptmp =null;
tchar subblock[max_path];
memset((
void*)subblock, 0, sizeof
(subblock));
uint ulen = 0
;
//獲取每種 codepage 和 language 資源的相關資訊
//這個地方原本是用for迴圈獲取每一種codepage 和 language,但是獲取了他的長度後發現,長度太短了,而我們想要獲取的東西卻又比較多,經過測試,只使用第一組資料即可
//在字串格式化的\\最後乙個字串的名稱就是我們想要獲取的屬性名稱,它們可以是
/*
companynamefiledescription
fileversion
internalname
originalfilename
productname
productversion
comments
legaltrademarks
privatebuild
specialbuild
*/
int ret = uiothersize / sizeof
(langandcodepage);
if (ret > 0
)
wsprintf(subblock, text(
"\\stringfileinfo\\%04x%04x\\companyname
"), planguage[0].wlanguage, planguage[0
].wcodepage);
if(verqueryvalue(pbuffer, subblock, (pvoid*)&ptmp, &ulen))
strcpy_s(proitem.strsoftwarevendors, ptmp);
wsprintf(subblock, text(
"\\stringfileinfo\\%04x%04x\\fileversion
"), planguage[0].wlanguage, planguage[0
].wcodepage);
if(verqueryvalue(pbuffer, subblock, (pvoid*)&ptmp, &ulen))
strcpy_s(proitem.strsoftwareversion, ptmp);
}deletepbuffer;
pbuffer =null;
}
DLL和EXE的區別
動態鏈結庫 dynamic link library,縮寫為dll 是乙個可以被其它應用程式共享的程式模組,其中封裝了一些可以被共享的例程和資源。動態鏈結庫檔案的副檔名一般是dll,也有可能是drv sys和fon,它和可執行檔案 exe 非常類似.區別dll中雖然包含了可執行 卻不能單獨執行,而應...
DLL和EXE的區別
動態鏈結庫 dynamic link library,縮寫為dll 是乙個可以被其它應用程式共享的程式模組,其中封裝了一些可以被共享的例程和資源。動態鏈結庫檔案的副檔名一般是dll,也有可能是drv sys和fon,它和可執行檔案 exe 非常類似.區別dll中雖然包含了可執行 卻不能單獨執行,而應...
DLL和EXE的區別
原創 2009年05月12日 16 59 00 動態鏈結庫 dynamic link library,縮寫為dll 是乙個可以被其它應用程式共享的程式模組,其中封裝了一些可以被共享的例程和資源。動態鏈結庫檔案的副檔名一般是dll,也有可能是drv sys和fon,它和可執行檔案 exe 非常類似.區...