Re: VS_VERSION_INFO static ctrl
This is another issue that fits in this thread.
I've been messing with the GetFileVersionInfo() but when it's in my cpp, I
get link errors. I can't seem to find a header file that might be missing
so I don't understand it. The code snip is shown below. I have some extra
code because I'm experimenting a bit but the issue is the
GetFileVersionInfo() linker Issue.
*********************************************************
//get filename, add .exe, then get handle to this filename
CString strFileName( _T("") );
strFileName = AfxGetApp()->m_pszExeName;
strFileName.Append( _T(".exe") );
HMODULE hmod = GetModuleHandle( strFileName );
//use GetModuleFileName() to obtain full path of file
CString strFullPath( _T("") );
LPTSTR pstr = strFullPath.GetBufferSetLength(MAX_PATH+1);
DWORD pathLen = ::GetModuleFileName( hmod, pstr, MAX_PATH);
strFullPath.ReleaseBuffer( pathLen ); //Note: ReleaseBuffer doesn't need
a +1 for the null byte
//Use GetFileVersionInfo() to get file information
TCHAR szExePath[MAX_PATH];
::GetModuleFileName( NULL, szExePath, MAX_PATH );
DWORD dwDummy;
DWORD dwFVISize = GetFileVersionInfoSize( szExePath, &dwDummy );
LPBYTE lpVersionInfo = new BYTE[dwFVISize];
GetFileVersionInfo( szExePath , 0 , dwFVISize , lpVersionInfo );
if( lpVersionInfo )
delete lpVersionInfo;
VS_FIXEDFILEINFO *lpFfi;
DWORD dwFileVersionMS = lpFfi->dwFileVersionMS;
DWORD dwFileVersionLS = lpFfi->dwFileVersionLS;
DWORD dwLeftMost = HIWORD(dwFileVersionMS);
DWORD dwSecondLeft = LOWORD(dwFileVersionMS);
DWORD dwSecondRight = HIWORD(dwFileVersionLS);
DWORD dwRightMost = LOWORD(dwFileVersionLS);
CString sMsg;
sMsg.Format( _T("Version: %d.%d.%d.%d") , dwLeftMost,
dwSecondLeft,dwSecondRight, dwRightMost );
MessageBox( sMsg );
********************************************************
These are the liker Errors:
Error 1 error LNK2019: unresolved external symbol _GetFileVersionInfoW@16
referenced in function "public: void __thiscall
CAppVersionDynamicDlg::OnBnClickedButtonVersion(void)"
(?OnBnClickedButtonVersion@CAppVersionDynamicDlg@@QAEXXZ)AppVersionDynamicDlg.obj AppVersionDynamicError 2 error LNK2019: unresolved external symbol _GetFileVersionInfoSizeW@8
referenced in function "public: void __thiscall
CAppVersionDynamicDlg::OnBnClickedButtonVersion(void)"
(?OnBnClickedButtonVersion@CAppVersionDynamicDlg@@QAEXXZ)AppVersionDynamicDlg.obj AppVersionDynamic"Joseph M. Newcomer" <newcomer@flounder.com> wrote in message
news:cc1f16hsn3lejfmtp2b5n0a20093vii1bf@4ax.com...
The idea is that the header file is used to create both the string in the
About box and
the values in the .rc file that describes the VERSIONINFO.
joe
On Mon, 14 Jun 2010 18:54:46 -0500, "JCO" <someone@somewhere.com> wrote:
I think I'm missing something but I'm interested in this topic.
If you have your version defined in a header file, then you can display it
in the dialog, however, if you did a "property" on the exe file, has it
really changed? If so, then I got lost somewhere in this thread.
Also;
I was under the impression that you can set something in VS that allowed
the
version to change each time you do a build. I don't remember how to do
this
but I always thought this was possible. Now it may only change the Build
number and not anything else, however, this is a good feature. Is this
still possible, if so .... how do you do it?
Thanks
"Giovanni Dicanio" <giovanniDOTdicanio@REMOVEMEgmail.com> wrote in message
news:eg3hiCyCLHA.2012@TK2MSFTNGP02.phx.gbl...
On 13/06/2010 15:47, RB wrote:
void CFileHandlingApp::OnAppAbout()
{
CAboutDlg aboutDlg;
CString s;
s.Format( _T(" version %d.%d.%d.%d"), VERMAJ, VERMIN, VERFIX,
BUILDNUMBER );
aboutDlg.m_CtrlStaticVer.SetWindowText(s); //gets a Debug Assertion
Failed
aboutDlg.DoModal();
You may want to add a method to your CAboutDlg class like
SetVersionString(LPCTSTR pszVersion) and a data member of type CString
(e.g. CString m_strVersion).
This new method should set the version string, storing it into the
proper
data member.
Then, CAboutDlg::OnInitDialog would get this string and .SetWindowText()
it in the proper static control.
e.g.:
class CAboutDlg
{
...
public:
void SetVersionString(LPCTSTR pszVersion)
{
m_strVersion = pszVersion;
}
...
private:
CString m_strVersion;
};
In CAboudDlg::OnInitDialog() do:
m_CtrlStaticVer.SetWindowText(m_strVersion);
Giovanni
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm