下面的这段代码只能够用一个文件中包含的图片替换另外一个文件中包含的图片,但是我希望能够直接直接用一个图片(比如:Test.jpg)文件替换掉这个文件中包含的图片. 可以吗?各位大侠们,求求你们一定要帮帮我呀!感谢!代码下载: http://basic.nease.net/MyExe/RES.zip这段代码是从CSDN上找到的,仅供参考:(小部分代码)    On Error GoTo Error_Handler
    Dim hResInfo As Long
    Dim hResData As Long
    Dim hRes As Long
    Dim lRet As Long
    Dim hMod As Long
    Dim sTmp As String
    Dim lpResType As Long, lpResName As Long
    Dim bResType() As Byte, bResName() As Byte
    
    With oResEntry
        
        If oResEntry.ResTypeLng <> m_lResTypeLng Then
            RaiseError vbObjectError + 9999, "文件" & .Filename & "不存在", THIS_MODULE_NAME
        End If
               
        hMod = LoadLibrary(.Filename)
        
        If hMod = 0 Then
            RaiseError vbObjectError + 9999, "文件" & .Filename & "不存在", THIS_MODULE_NAME
        End If
        
        If (.ResTypeLng And &HFFFF0000) = 0 Then
            lpResType = .ResTypeLng
        Else
            'lpResType = StrPtr(m_sResTypeStr)
            bResType = StrConv(.ResTypeStr & Chr(0), vbFromUnicode)
            lpResType = VarPtr(bResType(0))
        End If
        
        If (.ResNameLng And &HFFFF0000) = 0 Then
            lpResName = .ResNameLng
        Else
            'lpResName = StrPtr(m_sResNameStr)
            bResName = StrConv(ResNameStr & Chr(0), vbFromUnicode)
            lpResName = VarPtr(bResName(0))
        End If
        
        hResInfo = FindResourceEx(hMod, lpResType, lpResName, .LangInt)
    
        If hResInfo = 0 Then
            RaiseError vbObjectError + 99999, "资源查找错误", THIS_MODULE_NAME
        End If
    
        hResData = LoadResource(hMod, hResInfo)
    
        If hResData = 0 Then
            RaiseError vbObjectError + 9999, "资源查找错误", THIS_MODULE_NAME
        End If
    
        hRes = LockResource(hResData)
    
        If hRes = 0 Then
            RaiseError vbObjectError + 9999, "资源查找错误", THIS_MODULE_NAME
        End If
    End With
    
    Dim hUpdateRes As Long
    MsgBox m_sFilename
    hUpdateRes = BeginUpdateResource(m_sFilename, 0&)
    If hUpdateRes = 0 Then
        RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
    End If
    
    If (m_lResTypeLng And &HFFFF0000) = 0 Then
        lpResType = m_lResTypeLng
    Else
        'lpResType = StrPtr(m_sResTypeStr)
        bResType = StrConv(m_sResTypeStr & Chr(0), vbFromUnicode)
        lpResType = VarPtr(bResType(0))
    End If    If (m_lResNameLng And &HFFFF0000) = 0 Then
        lpResName = m_lResNameLng
    Else
        'lpResName = StrPtr(m_sResNameStr)
        bResName = StrConv(m_sResNameStr & Chr(0), vbFromUnicode)
        lpResName = VarPtr(bResName(0))
    End If
    MsgBox oResEntry.ResSize
    If UpdateResource(hUpdateRes, lpResType, lpResName, m_iLangInt, hRes, oResEntry.ResSize) = 0 Then
        RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
    End If
    
    If EndUpdateResource(hUpdateRes, 0&) = 0 Then
        RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
    End If
    
    FreeResource hResData
    FreeLibrary hMod
    
    OpReplaceRes = True
    Exit Function
Error_Handler:
    '自定义错误处理
    If hResData <> 0 Then
        FreeResource hResData
    End If
    
    If hMod <> 0 Then
        FreeLibrary hMod
    End If
    
    '调用默认错误处理函数
    Call DefaultErrorHandler(THIS_MODULE_NAME)

解决方案 »

  1.   

    你把我的代码稍微改一下,把从文件提取资源字节流改成直接打开jpg文件读取的字节流就可以了
      

  2.   

    "把从文件提取资源字节流改成直接打开jpg文件读取的字节流"? 绿豆老师,能够给点详细的指教吗?
    谢谢呀 :)
      

  3.   

    你转到函数Public Function OpReplaceResUsingRawBytes(oIconEntry As CIconEntry) As Boolean
        On Error GoTo Error_Handler
        Dim lRet As Long
        Dim lpResType As Long, lpResName As Long
        Dim bResType() As Byte, bResName() As Byte
        Dim bRawBytes() As Byte
        Dim hUpdateRes As Long
        
        bRawBytes = oIconEntry.GetRawBytes
    ...把bRawBytes = oIconEntry.GetRawBytes 中的oIconEntry.GetRawBytes改成你读入的jpg文件字节数组bJPG就可以了
      

  4.   

    豆子老师呀,我试着改了一下,但是没有成功,结果是替换后没有发现任何图片了,这应该怎么解决呀?
    你能够给我一个详细的代码吗?谢谢了!
    下面是我改的:
    Public Function GetImgBytes(ByVal new_File As String) As Byte()
        On Error GoTo Error_Handler
        Dim b() As Byte
        Dim lFreefile As Long
        Dim ImgFile As String
        lFreefile = FreeFile
        ImgFile = new_File
        Open ImgFile For Binary As #lFreefile
        
        'Seek #lFreefile, m_lRawDataOffset + 1
        ReDim b(Len(ImgFile) - 1) As Byte
        Get #lFreefile, , b
        
        Close #lFreefile
        GetImgBytes = b
        Exit Function
    Error_Handler:
        '自定义错误处理
        Close #lFreefile
        '调用默认错误处理函数
        Call DefaultErrorHandler(THIS_MODULE_NAME)
    End Function
      

  5.   

    下面的这段代码意在用图片文件替换Exe中包含的图片资源,但是运行后,没有成功,请各位大侠帮我看看应该怎么解决呀?    On Error GoTo Error_Handler
        Dim lRet As Long
        Dim lpResType As Long, lpResName As Long
        Dim bResType() As Byte, bResName() As Byte
        Dim bRawBytes() As Byte
        Dim hUpdateRes As Long
        
        bRawBytes = oIconEntry.GetRawBytes    If SizeOfArray(bRawBytes) <= 0 Then
            RaiseError vbObjectError + 9999, "资源查找错误", THIS_MODULE_NAME
        End If
        
        hUpdateRes = BeginUpdateResource(m_sFilename, 0&)
        
        If hUpdateRes = 0 Then
            RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
        End If
        
        If (m_lResTypeLng And &HFFFF0000) = 0 Then
            lpResType = m_lResTypeLng
        Else
            'lpResType = StrPtr(m_sResTypeStr)
            bResType = StrConv(m_sResTypeStr & Chr(0), vbFromUnicode)
            lpResType = VarPtr(bResType(0))
        End If    If (m_lResNameLng And &HFFFF0000) = 0 Then
            lpResName = m_lResNameLng
        Else
            'lpResName = StrPtr(m_sResNameStr)
            bResName = StrConv(m_sResNameStr & Chr(0), vbFromUnicode)
            lpResName = VarPtr(bResName(0))
        End If    If UpdateResource(hUpdateRes, lpResType, lpResName, m_iLangInt, VarPtr(bRawBytes(0)), SizeOfArray(bRawBytes)) = 0 Then
            RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
        End If
        
        If EndUpdateResource(hUpdateRes, 0&) = 0 Then
            RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
        End If
      

  6.   

    Public Function OpReplaceResUsingRawBytes(oIconEntry As CIconEntry) As Boolean
        On Error GoTo Error_Handler
        Dim lRet As Long
        Dim lpResType As Long, lpResName As Long
        Dim bResType() As Byte, bResName() As Byte
        Dim bRawBytes() As Byte
        Dim hUpdateRes As Long
        
        bRawBytes = oIconEntry.GetRawBytes    If SizeOfArray(bRawBytes) <= 0 Then
            RaiseError vbObjectError + 9999, "资源查找错误", THIS_MODULE_NAME
        End If
        
        hUpdateRes = BeginUpdateResource(m_sFilename, 0&)
        
        If hUpdateRes = 0 Then
            RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
        End If
        
        If (m_lResTypeLng And &HFFFF0000) = 0 Then
            lpResType = m_lResTypeLng
        Else
            'lpResType = StrPtr(m_sResTypeStr)
            bResType = StrConv(m_sResTypeStr & Chr(0), vbFromUnicode)
            lpResType = VarPtr(bResType(0))
        End If    If (m_lResNameLng And &HFFFF0000) = 0 Then
            lpResName = m_lResNameLng
        Else
            'lpResName = StrPtr(m_sResNameStr)
            bResName = StrConv(m_sResNameStr & Chr(0), vbFromUnicode)
            lpResName = VarPtr(bResName(0))
        End If    If UpdateResource(hUpdateRes, lpResType, lpResName, m_iLangInt, VarPtr(bRawBytes(0)), SizeOfArray(bRawBytes)) = 0 Then
            RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
        End If
        
        If EndUpdateResource(hUpdateRes, 0&) = 0 Then
            RaiseError vbObjectError + 9999, "资源替换错误", THIS_MODULE_NAME
        End If
        
        OpReplaceResUsingRawBytes = True
        Exit Function
    Error_Handler:
        '自定义错误处理
        
        '调用默认错误处理函数
        Call DefaultErrorHandler(THIS_MODULE_NAME)
    End Function