首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

大侠们,小弟,enumrespourcenames枚举资源类型的有关问题

2012-02-03 
大侠们,小弟求助,enumrespourcenames枚举资源类型的问题。小弟想实现这样的功能:1.查找本exe文件资源区类型

大侠们,小弟求助,enumrespourcenames枚举资源类型的问题。
小弟想实现这样的功能:
1.查找本exe文件资源区类型为一自定义类型x的资源名称,
2.通过枚举,枚举到所有这种类型的资源
3.将枚举到的资源输出到文本文档

目前的代码提示错误如下:“缺少End Sub”

以下是代码:

VB code
Private Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (ByVal hInstance As Long, ByVal lpName As String, ByVal lpType As String) As LongPrivate Declare Function LoadResource Lib "kernel32" (ByVal hInstance As Long, ByVal hResInfo As Long) As LongPrivate Declare Function LockResource Lib "kernel32" (ByVal hResData As Long) As LongPrivate Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As LongPrivate Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As LongPrivate Declare Function EnumResourceNames Lib "kernel32" Alias "EnumResourceNamesA" (ByVal hModule As Long, ByVal lpType As String, ByVal lpEnumFunc As Long, ByVal lParam As Long) As LongPrivate Declare Function SizeofResource Lib "kernel32" (ByVal hInstance As Long, ByVal hResInfo As Long) As LongPrivate Const GENERIC_WRITE = &H40000000Private Const CREATE_ALWAYS = 2Private Type SECURITY_ATTRIBUTES        nLength As Long        lpSecurityDescriptor As Long        bInheritHandle As LongEnd TypePrivate Type OVERLAPPED        Internal As Long        InternalHigh As Long        offset As Long        OffsetHigh As Long        hEvent As LongEnd TypePrivate Sub Form_Load()     '枚举     Public Function EnumResNameProc(ByVal hModule As Long, ByVal lpType As String, ByVal lpName As String, ByVal lParam As Long)            '加载资源        Dim hRes, hResLoad, hResLock As Long        hRes = FindResource(0, lpName, "x")        hResLoad = LoadResource(0, hRes)        hResLock = LockResource(hResLoad)        '将资源写入文件        Dim fp As Long        Dim tmp As Long        Dim size As Long        size = SizeofResource(0, hRes)        fp = CreateFile(lpName, GENERIC_WRITE, 0, vbNull, CREATE_ALWAYS, 0, 0)        WriteFile fp, hResLock, size, tmp, vbNull        '文件被释放,返回1继续枚举        EnumNamesFunc = 1     End Function     EnumResourceNames vbNull, "x", EnumResNameProc, 0End Sub


不好易思,小弟不才,错误可能很多,见笑了!

[解决办法]
这位兄台,函数定义不可以嵌套哦,就是说EnumResNameProc的定义不可以放在Form_Load()
里面的。EnumResNameProc是一个回调函数,就是说Windows来调用它,在VB里,这个函数只能放在模块里,然后在函数EnumResourceNames中用AddressOf关键字调用。

热点排行