请问有一个程序用LoadBitmap来显示位图资源
位图资源都是数字编号的 这是用资源工具查看的结果
请问得到了 LoadBitmap的第二个参数 能不能把他转换成int类型的比如显示 20 那张图像 ,能不能通过转换得到数字20

解决方案 »

  1.   


    奇思妙想...能说说你想这样做的缘由吗?用 LoadBitmap() 给指针加载位图 挺好用的 也简单或者我没看懂你说的意思?  
      

  2.   

    资源ID本身就是int型的常量啊,不用转换的。
      

  3.   

    哦 不好意思 我没说清楚
    我的意思是 我没源码 现在hook了LoadBitmap函数 得到了参数 我想把它的第二个参数转换为int类型的
    第二个参数一般都是 把它的资源id 用MAKEINTRESOURCE 转换过的吧 
    我想能不能在转换为int
      

  4.   

    本来的资源id都是数字 用MAKEINTRESOURCE 转换后是LPCTSTR类型的把,转换后还是不是数字格式的吗?请问还能不能在还原成数字?
      

  5.   

    我觉得不能,因为这种转换应该不是一一映射方法的。
    如果真的想得到资源ID,完全可以用exescope打开这个EXE文件来查看,就是用VS,以资源方式打开EXE文件也可以看到。
      

  6.   

    我记得你刚才问过啊,LoadBitmap第二个参数是LPCTSTR类型的,int型的需要用MAKEINTRESOURCE强制转换。资源ID,如果用数字来表示的话,范围是0~65535,也就是unsigned short的范围,这个范围的内存地址空间是用户不可访问的,不管是全局变量,还是你new的任何变量,都不可能在这个范围内。所以微软在定和资源相关的函数取了个巧,LPCTSTR类型的变量既可以表示数字表示的资源ID,又可以表示字符串表示的资源,LoadBitmap在其函数内部,当第二个参数小于等于65535时,视为数字ID,大于时视为字符串。最后说明一点,MAKEINTRESOURCE只是强制类型转换,骗编译器的,并不改变变量本身的值。
      

  7.   

    哦 我主要想实现判断他的资源id大小的 把图片分类  大于30的id是哪些图片 小于30的是哪些图片
    里面的图片很多,请问这个能不能实现,要是把LoadBitmap的第二个参数 和用工具看到的资源id对比分类 这样就太麻烦了 每张图片都得对比
      

  8.   


    资源ID可以定义为任意值的,只要在合法范围内。没有规定必须连续,也没有规定相同类型的资源必须放在一起。如果你想枚举某个类型的资源,可以用EnumResourceNames
      

  9.   

    HBITMAP Hook_LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName)
    {
        if (IS_INTRESOURCE(lpBitmapName))
        {
            // 资源名为数字
            WORD id = (WORD)lpBitmapName;
            if (id > 30)
            {
                // ...
            }
            else
            {
                // ...
            }
        }
        else
        {
            // 资源名为字符串
        }    // ...
    }
      

  10.   

    为何不用IDB_1,IDB_2…………IDB_30,IDB_32取区分??