2
嗨 有沒有辦法在C++項目的文件版本中創建一個自定義字段。以便我們可以看到這些字段以及文件版本,公司名稱等。我想創建字段,如 revision = 1000 定製= OEM1 。C++項目文件版本中的自定義字段
感謝 約翰
嗨 有沒有辦法在C++項目的文件版本中創建一個自定義字段。以便我們可以看到這些字段以及文件版本,公司名稱等。我想創建字段,如 revision = 1000 定製= OEM1 。C++項目文件版本中的自定義字段
感謝 約翰
您可以添加額外的字段到您的rc文件的版本信息。您不能添加數字字段,但可以添加本地化的字符串字段。我從來沒有試圖用GUI來做這件事,但我知道你可以通過直接更改文件來做到這一點。
在Visual C++中,右鍵單擊您的.rc文件並單擊「查看代碼」。某處在那裏,你會發現,開頭段:
BLOCK "StringFileInfo"
這可能阻止只有一個子塊:
BLOCK "0409904b0"
這個數字是語言環境描述符EN_US的數字版本。該模塊包含了幾個值項,如:
VALUE "FileVersion", "1, 0, 0, 0"
VALUE "OriginalFilename", "MyProjectName"
您可以添加您想在此部分中的任何領域,它會顯示在屬性對話框中可執行文件的版本選項卡上。
如果您需要能夠在運行時讀取這些值,你可以都使用GetFileVersionInfo是這樣的:
wchar_t myModululeName[MAX_PATH];
GetModuleFileName(NULL,myModuleName,MAX_PATH);
DWORD dummy;
DWORD versionSize=GetFileVersionInfoSize(myModuleName,&dummy);
//I don't remember why I added extra space to these
void * versionInfo=malloc(versionSize+10);
GetFileVersionInfo(myModuleName,0,versionSize+1,versionInfo);
//This part is optional
//The VS_FIXEDFILEINFO contains information from the non-localized parts of
//the "StringFileInfo" block in the .rc file
VS_FIXEDFILEINFO * fixedFileInfo;
UINT fixedFileSize;
VerQueryValue(versionInfo,L"\\",(void **)(&fixedFileInfo),&fixedFileSize);
//This will retrieve the local codes that are defined in the StringFileInfo block
WORD * translationTable;
UINT translationSize;
VerQueryValue(verionInfo,L"\\VarFileInfo\\Translation",(void **)(&translationTable),&translationTableSize);
//This always uses the first locale, you could examine translationTable
//if you need to for other codes
wchar_t mySpecialQuery[128];
sprintf_s(mySpecialQuery,L"\\StringFileInfo\\%04x%04x\\MySpecialVersionInfo",translationTable[0],translationTable[1]);
wchar_t * mySpecialValue;
UINT mySpecialValueSize;
VerQueryValue(versionInfo,mySpecialQuery,(void **)(&mySpecialValue),&mySpecialValueSize);
//you can now do whatever you need to do with mySpecialValue, including using _wtoi()
//and query for more values
free(versionInfo);
感謝該做的 – John 2011-05-26 15:27:04
對我的作品後,我固定2個錯誤 - IronMensan,你得到這個代碼編譯?請參閱「翻譯[Table?] Size」,並且我必須去掉字符串前面的「L」。 – 2014-01-07 04:09:24
@TimCooper我認爲這與我的實際代碼之間的變化很少。 'MySpecialVersionInfo'而不是一個更有意義的字符串等等。我現在不在這家公司,所以我沒有訪問代碼來比較。 「L」將文字標記爲寬字符串,如果您需要它們,則取決於您的構建設置。 – IronMensan 2014-01-07 16:00:33