PctGL SERIES  
http://pctgl.cnblogs.com
今天碰到一个非常郁闷的事情......

      最近想用资源的方式在汇编下写个程序,但我的汇编编辑环境有些问题,对资源文件的配置有些BUG

所以,在 VB6 下编辑了一些数据到资源文件中,首先碰到一个小问题就是用资源编辑器编辑好的版本信息

资源无法在 VB6 下正常使用(程序无法编译).还有一个问题就是 XPMainFest,这个第24号资源总是显示

出有问题,(实际是没问题的,但VB就是不让正常执行)....


      这还都是小case,无关紧要.最折腾我的是个 WinAPI : FindResource

      从API查看器中加载的默认声明如下:

Private Declare Function FindResource Lib "kernel32" Alias "FindResourceA"  _
(ByVal hInstance As Long,ByVal lpName As String,ByVal lpType As String) As Long

     简单说明一下这个 API 的参数:

         ByVal hInstance As Long      指定一个模块的句柄,这个模块包含一个用户需要的资源
 
         ByVal lpName As String       指定一个资源的名字

         ByVal lpType As String       指定一个资源的类型


      VB6中默认的自定义资源一般是这样配置的:

      VB自动指定1个为 "CUSTOM" (为目录)的自定义资源类型,然后添加1个用户指定的资源名字为 "101"


      我们以 SDK 的开发方式加载这个资源就应该这样调用:

      Dim i as Long
      i = FindResource(app.hinstance,"101","CUSTOM")

      看似完全正确的调用,但返回值永远是 0,也就是说调用错误......

      首先怀疑,VB对资源做了什么手脚,可不知道怎么查好......

      暂时放弃这个想法........


      想到是API的问题,经过查看 WinAPis SDK 文档,(一堆鸟文没细看)文档中标注为 RT_* 等

  预定义类型,也没多看, Google 看看,看了一些 C++ 的资料,结果很多人都说用 RT_RCDATA ,

  我觉得不对劲...... 我分明是看到过 RT_RCDATA 类型的资源,他们和自定义类型完全不匹配...

  狂想后,测试结果也同样表明是错误的. 联想,调用预定义的资源类型是传递一个 Long 型,那....

  自定义也该是 Long 型,修改第 3 个参数为
ByVal lpType As Long,测试 N to N + 1 ...
 
  结果可想而知...

    
      郁闷了一阵...

       Google 代码搜索 ...

     
Google 代码搜索 是个好东西,不过里面好多代码全是....
     
      比如说,想搜 FindResource 这个 APi,结果搜了一堆,下了代码一看,N 多模块,声明了 N 多

  API,其中包括你想搜的,但你怎么找也找不到在哪用了那个 APi.... 这就是最郁闷的地方...

      废话不多说了,找到1个,看了看别人用的也是那样啊...
  
  不过... 他居然把资源名字改成了纯字符的方式:

                    i = FindResource(app.hinstance,"IMAGE1","IMAGE")

  能看出来,代码作者添加了一个 IMAGE 的资源类型, 添加了一个 IMAGE1 为资源名的数据.



      是不是 VB 的类型自动转换的问题?

  做个测试就知道了,修改自己的资源名为纯文本, "AAA1" ,编译 > 测试 >>>>>> 通过了!


      再来:

Private Declare Function FindResource Lib "kernel32" Alias "FindResourceA"  _
(ByVal hInstance As Long,ByVal lpName As Long,ByVal lpType As String) As Long

i = FindResource(App.hInstance, 101, "PCTGL")

      通过


 

演示代码:

https://files.cnblogs.com/pctgl/%E8%AF%BB%E5%8F%96%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B5%84%E6%BA%90.rar 

 

    
posted on 2009-08-06 14:38  PctGL  阅读(568)  评论(0编辑  收藏  举报