今天继续研究了关于资源操作的API函数,研究的是枚举文件资源的三个API:EnumResourceNames 、EnumResourceTypes和EnumResourceLanguages。这几个函数都非常的相似,作用分别是枚举资源的名称、类型和语言。
EnumResourceNames的第一个参数是要枚举资源的模块的句柄,一般可以用LoadLibrary来获得,不过使用后记得要用FreeLibrary来释放句柄,如果这个句柄传入值是0的话就相当于传入了App.hInstance,即当前进程的模块句柄。
第二个参数是要枚举的资源的类型标识,可以是RT_开头的API常数,废话多说一个,RT=Resource Type。。。。
第三个参数是回调函数的指针,可以用“AddressOf 函数名”获取,函数格式上面有要求,必须要是下面这样的格式:
Function EnumNamesFunc(ByVal hModule As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal lParam As Long) As Boolean
第一二个参数不用说了,和EnumResourceNames传入的值一样,第三个参数可以是一个表示资源名称的指向字符串的指针,也可以是表示一个资源ID的数值,可以这样来判断类型(API-GUIDE里面给出的例子):
Dim ResName As String, LenOfRN As Long
If (lpName > &HFFFF&) Or (lpName < 0) Then '为字符串指针
LenOfRN = lStrLen(lpName): ResName = Space$(LenOfRN)
CopyMemory ByVal ResName, ByVal lpName, LenOfRN
Else '类型为数值
End If
另外也可以用一个以“#”开头的字符串来代替数值ID,比如“#234”就代表数值ID为234的资源。
最后一个参数lParam是用户自己定义的附加信息,就是EnumResourceNames传入的最后一个参数了,我一般都传个hUpdate进去的,以便更新资源。
其他的两个API都是大同小异的,就不多废话了,大家看看源码的示例吧~~~~谢谢收看~~~~~