bool LoadStringFromResource(CStringA &str, LPCTSTR pszName, LPCTSTR pszType, HINSTANCE hInst)
{
ASSERT(pszName!=NULL && pszType!=NULL);
// Clear string
str.Empty();
// Search for the Resource
if (!hInst)
hInst = AfxFindResourceHandle(pszName, pszType);
if (!hInst)
{
ASSERT(FALSE);
TRACE_NAME_AND_TYPE(_T(__FUNCTION__) _T(": AfxFindResourceHandle failed"),pszName,pszType);
return false;
}
HRSRC hRes = ::FindResource(hInst, pszName, pszType);
if (!hRes)
{
ASSERT(FALSE);
TRACE_NAME_AND_TYPE(_T(__FUNCTION__) _T(": FindResource failed"),pszName,pszType);
return false;
}
HGLOBAL hGlobal = ::LoadResource(hInst, hRes);
if (!hGlobal)
{
ASSERT(FALSE);
TRACE_NAME_AND_TYPE(_T(__FUNCTION__) _T(": LoadResource failed"),pszName,pszType);
return false;
}
PCSTR pStr = (PCSTR)LockResource(hGlobal);
if (!pStr)
{
ASSERT(FALSE);
TRACE_NAME_AND_TYPE(_T(__FUNCTION__) _T(": LockResource failed"),pszName,pszType);
return false;
}
// Copy data
int nSize= (int)SizeofResource(hInst, hRes);
str = CString(pStr,nSize);
// succeeded
return true;
}