414133542 发表于 2010-2-7 13:08:27

如何用UpdateResource替换位图文件

UpdateResource这个函数可以替换自定义资源文件,可是替换位图文件的时候出现了问题,替换的时候成功,可是在程序调用的时候提示无效图片...我知道是函数写错了,该怎样解决这个问题呢?
Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Private Const RT_BITMAP = 2&

Private Function WriteRes(ByVal ResFileName As String, ByVal WriteFileName As String, ByVal ResID As Long) As Boolean
Dim VbArrayRes() As Byte '写入内容
Dim hUpdate As Long '被写入的目标文件路径
Dim Ret As Long '资源句柄
    hUpdate = BeginUpdateResource(WriteFileName, False) '打开要写入的目标文件
    ReDim VbArrayRes(FileLen(ResFileName) - 1) '计算资源文件大小
    Open ResFileName For Binary As #1 '获取资源文件内容
      Get #1, , VbArrayRes
    Close #1
    Ret = UpdateResource(hUpdate, RT_BITMAP, ResID, 2052, VbArrayRes(0), UBound(VbArrayRes) + 1) '添加资源
      If Ret <> 0 Then
            WriteRes = True
      End If
    '关闭资源更新
    Ret = EndUpdateResource(hUpdate, False)
End Function
Private Sub Command2_Click()
WriteRes "C:\Documents and Settings\Administrator\桌面\test.bmp", "C:\Documents and Settings\Administrator\桌面\test.exe", 101
End Sub

马大哈 发表于 2010-2-8 11:47:49

减去一个文件头就可以了,不需要将整个文件加载进去的.

对于BITMAP文件,其文件头:Private Type BITMAPFILEHEADER
    bfType As Integer      '2字节
    bfSize As Long         '4字节
    bfReserved1 As Integer
    bfReserved2 As Integer
    bfOffBits As Long
End Type长度为2+4+2+2+4=14字节,那么UpdateResource这句改成这样就行了:Ret = UpdateResource(hUpdate, RT_BITMAP, ResID, 2052, VbArrayRes(14), UBound(VbArrayRes) -14 + 1) '添加资源

414133542 发表于 2010-2-8 16:47:04

行了,马哥真厉害,太佩服了{:2_31:}

马大哈 发表于 2010-2-9 02:26:40

其实我只是治了个标.......这个函数所需要的条件我还是不清楚,不过是利用工具找到了这个特定格式的规律而已....

具体过程:

http://www.m5home.com/blog/article.asp?id=406

要治本,还得是老老实实地啃MSDN啊.....:L
页: [1]
查看完整版本: 如何用UpdateResource替换位图文件