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 String, ByVal lpName As Integer, 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 LongDim StrData, lzFullPath, Out As String
Dim hUpdate As Long, iRet As Long                lzFullPath = "c:\Test1.jpg"
                OutPutFile = "c:\aaa.exe"                Open lzFullPath For Binary As #1
                    StrData = Input$(LOF(1), #1)
                Close #1
                
                DoEvents
                
                hUpdate = BeginUpdateResource(OutPutFile, False) '获取文件句柄
                iRet = UpdateResource(hUpdate, 2110, UCase(lstFiles.List(I)), 1033, ByVal StrData, Len(StrData)) '更新文件资源
                iRet = EndUpdateResource(hUpdate, False) '保存数据上面的代码只能正确写入文本写入图片的话数据都会发生变化= =
哪位高手可以修改一下上面的代码使图片也能正常写入急万分感谢

解决方案 »

  1.   

    P.S. 上面的API只能在Win2k/xp下使用
      

  2.   

    对于2进制数据不要用String类型来装,用字节数组更合适,这样看看Dim abData() As Byte
    Open lzFullPath For Binary As #1
    ReDim abData(LOF(1) - 1)
    Get #1,LOF(1),abData
    Close #1  hUpdate = BeginUpdateResource(OutPutFile, False) '获取文件句柄
                    iRet = UpdateResource(hUpdate, 2110, UCase(lstFiles.List(I)), 1033, abData(0), UBound(abData) + 1) '更新文件资源
                    iRet = EndUpdateResource(hUpdate, False) '保存数据
      

  3.   

    不可以把他直接做为资源文件嵌到程序中么?
    生成*.res
      

  4.   

    VB里用那条API有问题用C++重写程序就好了