I have an MFC-based app that uses the Office 2007 ribbon interface. MFC is statically linked.
I'm trying to add Japanese localization. I have the localized resources in a separate DLL. I'm loading the resource DLL at the beginning of InitInstance
:
VERIFY(hRes = LoadLibrary(_T("JapaneseLang.dll")));
if(hRes)
AfxSetResourceHandle(hRes);
This causes an assert failure at CMFCVisualManagerOffice2007::OnUpdateSystemColors
#if !defined _AFXDLL
TRACE(_T("\r\nImportant: to enable the Office 2007 look in static link,\r\n"));
TRACE(_T("include afxribbon.rc from the RC file in your project.\r\n\r\n"));
ASSERT(FALSE);
#endif
But I do have afxribbon.rc
included in the rc files of both the DLL and the EXE.
I also found a similar question asked at tech-archive.net and a possible solution is outlined there
Now i find the error location. this shoule be a bug of new mfc version.
In the CMFCVisualManagerOffice2007 ,when the style is changing , the function SetStyle of CMFCVisualManagerOffice2007 auto call FreeLibrary to free the dll, so the error happend.
Now i derived a class from CMFCVisualManagerOffice2007 and add a static function to set the member variable m_bAutoFreeRes , by doing this the application can run correctly; see bellow.
class CMFCVisualExtManagerOffice2007 : public CMFCVisualManagerOffice2007 { DECLARE_DYNCREATE(CMFCVisualExtManagerOffice2007) public: CMFCVisualExtManagerOffice2007(); virtual ~CMFCVisualExtManagerOffice2007();
static void SetAutoFreeRes(BOOL bAutoFree = FALSE) { m_bAutoFreeRes = bAutoFree; } };
But I have trouble understanding what exactly causes the problem, and how this solution works. Also I'm not sure if it is a correct solution. Does anyone know what exactly causes this problem, and how the solution works?