是否有更快或更有效的方法来获取PE文件中的最后一个bmp资源ID?我有30个+ PE文件,其中一些有1000个bmp reosurces.它们在程序启动时加载,加载所有PE文件大约需要1-2分钟.
unsigned int Video::CountResources(HMODULE module,unsigned int maxid)
{
if(maxid > 9999) maxid = 9999;//hardcode value for now
if(!module)return 0;
BITMAP bm;
HBITMAP bitmap = 0;
unsigned int last_id = 0;
for(unsigned int resid = 0; resid <= maxid; ++resid)
{
if (bitmap) DeleteObject(bitmap);
bitmap = LoadBitmap( module, MAKEINTRESOURCE( 101+resid ) );
if (!bitmap) continue;
if(!GetObject(bitmap,sizeof(bm),reinterpret_cast<LPSTR(&bm))) continue;
last_id = resid;
}
return last_id+1;
}
Run Code Online (Sandbox Code Playgroud)
问题解决了!我尝试了EnumResourceNames()一些其他方法和几个pe_libs.底线是计算资源的所有函数迭代通过资源文件1循环到另一个没有太多提高速度,所以我只是修改我的CountResources()函数使用FindResource而不是LoadBimap并且对结果感到满意.实际问题在我的代码中稍微深一点,我检查了预加载模块是否存在,如果它不存在,则称为LoadLibrary()的模块每次都不存在预加载的模块.我目前所有PE文件的加载时间是4秒.谢谢你的帮助和输入!
unsigned int Video::CountResources(HMODULE module,unsigned int maxid)
{
//hardcode value for now
if(maxid …Run Code Online (Sandbox Code Playgroud)