何年か前に作成したツールをビルドしていて,ちょっと気になったこと.
exe 名を変更した時,設定値がうまく引き継がれない.
レジストリを使用している時は AFX_IDS_APP_TITLE を追加すれば良いが ini では効果がない.
最近書いたコードからは,次の様に m_pszProfileName を変更する様にしている.
BOOL RI_Set_ProfileName (void)
{
CWinApp* app = AfxGetApp() ;
if (app == NULL) { return FALSE ; }
CString nowINI = app->m_pszProfileName ;
CString newINI = ::INI_get_module_ini().c_str() ;
if (nowINI == newINI) { return TRUE ; }
free((void*)app->m_pszProfileName) ;
app->m_pszProfileName = _tcsdup(newINI) ;
{
std::tout << _T("org=") << LPCTSTR(nowINI) << std::endl ;
std::tout << _T("new=") << LPCTSTR(newINI) << std::endl ;
}
return TRUE ;
}
BOOL RI_Set_RegistryKey (void)
{
CWinApp* app = AfxGetApp() ;
if (app == NULL) { return FALSE ; }
CString nowKey = app->m_pszRegistryKey ;
CString newKey = ::REG_get_product().c_str() ;
if (nowKey == newKey) { return TRUE ; }
{
free((void*)app->m_pszRegistryKey) ;
app->m_pszRegistryKey = _tcsdup(newKey) ;
}
CString nowApp = app->m_pszProfileName ;
CString newApp = app->m_pszAppName ;
if (nowApp == newApp) { return TRUE ; }
{
free((void*)app->m_pszProfileName) ;
app->m_pszProfileName = _tcsdup(app->m_pszAppName) ;
}
{
std::tout << _T("org=") << LPCTSTR(nowKey) << std::endl ;
std::tout << _T("new=") << LPCTSTR(newKey) << std::endl ;
}
return TRUE ;
}
[…] MFC を使用するコンソール AP での SetRegistryKey の使用は次の所. https://dev.mish.work/wordpress/2021/07/21/console-ap-setregistrykey/ https://dev.mish.work/wordpress/2024/01/30/appname-ini/ […]