用eXeScope打开看原来的是:
资源
  图标
  MAINICON
  1: 32*32,16色 对应原图标换完后变成:
资源
  图标
  MAINICON
  1: 32*32,16色 显示语言中性 中文(中国)
  语言中性 对应换了后的图标
  中文(中国) 对应原图标
    
真是见了鬼了。但是确实是换了,可以显示新图标。但是程序用UPX压过后,就老是出问题。而且老图标也在里面,图标资源结构也改了,心里总是不放心。代码如下:
int TestC(char SFileName[],char DFileName[])   
{   HINSTANCE hInstance=LoadLibrary(SFileName);//载入图标源文件   DWORD maxSize=0;
  HRSRC hRsrc =NULL;
 DWORD resourcelen=0;
 int idx=1;
 int maxidx=1;
  LPVOID lpRes =0;
 HANDLE hUpdateRes =0;
 while(true)
 {//讀取最大的圖片
  hRsrc=FindResource(hInstance,(LPCSTR)idx,(LPCSTR)RT_ICON); //查找源文件中的图标文件
  resourcelen=SizeofResource(hInstance,hRsrc);
  if(resourcelen<=0)
  {
  break;
  }
  if(resourcelen>maxSize)
  {
  maxSize=resourcelen;
  maxidx=idx;
  }
  idx++;
 }
 hRsrc=FindResource(hInstance,(LPCSTR)maxidx,(LPCSTR)RT_ICON); //查找源文件中的图标文件
 resourcelen=SizeofResource(hInstance,hRsrc);
 lpRes =LockResource(LoadResource(hInstance,hRsrc)); //锁定资源
 if (!lpRes)
 {
  return 0;
 }
  
  hUpdateRes = BeginUpdateResource(DFileName, FALSE); //更新dd2文件图标为dd的  
if(!hUpdateRes)
  {
return 0;
}
  //更新图标资源
if(!UpdateResource(hUpdateRes,(LPCSTR)RT_ICON, (LPCSTR)1,0,lpRes,resourcelen))
  {
return 0;
}
  //结束更新资源
  if(!EndUpdateResource(hUpdateRes,FALSE))
  {
return 0;
}    
  FreeResource(hRsrc); //关闭句柄
  FreeResource(hUpdateRes);//关闭句柄
  //释放载入的源文件
  if(!FreeLibrary(hInstance))
  {
return 0;
}
return 1;
    
  }