int WResLoadResource( PHANDLE_INFO hinfo, UINT idType, UINT idResource, lpstr *lpszBuffer, size_t *bufferSize ) /*****************************************************************************/ { WResID resource_type; WResID resource_id; WResInitIDFromNum( idResource, &resource_id ); WResInitIDFromNum( idType, &resource_type ); return( WResLoadResource2( MainDir, hinfo, &resource_type, &resource_id, lpszBuffer, bufferSize ) ); }
extern int WResLoadResource2( WResDir dir, PHANDLE_INFO hInstance, UINT idType, UINT idResource, LPSTR *lpszBuffer, int *bufferSize ) /******************************************************************/ { int retcode; WResID resource_type; WResID resource_id; WResDirWindow wind; WResLangInfo *res; WResLangType lang; char *res_buffer; if( ( lpszBuffer == NULL ) || ( bufferSize == NULL ) ) { return( -1 ); } lang.lang = DEF_LANG; lang.sublang = DEF_SUBLANG; WResInitIDFromNum( idResource, &resource_id ); WResInitIDFromNum( (long)idType, &resource_type ); wind = WResFindResource( &resource_type, &resource_id, dir, &lang ); if( WResIsEmptyWindow( wind ) ) { retcode = -1; } else { res = WResGetLangInfo( wind ); // lets make sure we dont perturb malloc into apoplectic fits if( res->Length >= INT_MAX ) { return( -1 ); } res_buffer = WRESALLOC( res->Length ); *lpszBuffer = res_buffer; if( *lpszBuffer == NULL ) { return( -1 ); } *bufferSize = (int)res->Length; retcode = GetResource( res, hInstance, res_buffer ); } return( retcode ); }
WResID * WResIDFromNum( long newnum ) /***********************************/ /* allocate an ID and fill it in */ { WResID * newid; if( (int_32)newnum < SHRT_MIN || ( newnum > 0 && newnum > USHRT_MAX ) ) { newid = NULL; WRES_ERROR( WRS_BAD_PARAMETER ); } else { newid = WRESALLOC( sizeof( WResID ) ); if( newid == NULL ) { WRES_ERROR( WRS_MALLOC_FAILED ); } else { WResInitIDFromNum( newnum, newid ); } } return( newid ); } /* WResIDFromNum */