自定义资源生成EXE文件

我使用资源编辑器添加了一个2.81MB的文件的自定义资源,然后使用以下的代码将其写入一个文件中,只不过,速度实在是太慢了(如果该自定义资源的比较小,速度就比较快).
    Dim lpFileTemp() As Byte
    Dim lpFileSize As Long, i As Long
    Dim iFileNum As Long
    iFileNum = FreeFile
    lpFileTemp = LoadResData(101, "CUSTOM")
    lpFileSize = UBound(lpFileTemp) - 1
    Open lpFileName For Binary As #iFileNum
    For i = 0 To lpFileSize
        Put #iFileNum, , lpFileTemp(i)
        DoEvents
    Next i
    Close #iFileNum


我想,多数人将自定义资源中的内容写成文件的形式,一般是使用以上类似的代码吧..
是否有没有速度更快的方式.通过某个API等等.
你一个一个字节的写当然慢了,改为:
 Dim lpFileTemp() As Byte
Dim lpFileSize As Long, i As Long
Dim iFileNum As Long
iFileNum = FreeFile
lpFileTemp = LoadResData(101, "CUSTOM")
Open lpFileName For Binary As #iFileNum
Put #iFileNum, , lpFileTemp
Close #iFileNum

 暴风雨正解

Open lpFileName For Binary As #1
Put #1, , LoadResData(101, "CUSTOM")
Close #1

晕~~ 看这个:

    Dim pFileBuffer() As Byte
    Dim nFileSize As Long
    Dim hFile as long
    dim dwBytesWritten as long
    dim nReturn as long

    pFileBuffer = LoadResData(101, "CUSTOM")
    nFileSize = UBound(pFileBuffer) - 1

    hFile = CreateFile( pszFileName,
                        GENERIC_WRITE,
                        0,
                        NULL,
                        CREATE_ALWAYS,
                        FILE_FLAG_SEQUENTIAL_SCAN,
                        0
                      )
                     
    if ( hFile = INVALID_HANDLE_VALUE )
        exit function
   
    if ( WriteFile(hFile, pFileBuffer(0), nFileSize, dwBytesWritten, 0) <> 0 )
        call FlushFileBuffers(hFile)

    '// 关闭文件句柄
    call CloseHandle(hFile)

CreateFile函数还有一个地方(NULL 改成 0)要改一下,我是从我的SDK代码COPY过来改成VB的

pFileBuffer = LoadResData(101, "CUSTOM")
    nFileSize = UBound(pFileBuffer) - 1

这两行也可改成直接API方式:

    dim hResInfo as long
    dim hMem as long
    dim pBuffer as long

    hResInfo = FindResource(app.hinstance, 101, RT_RCDATA)
    hMem = LoadResource(app.hinstance, hResInfo)
    nFileSize = SizeofResource(app.hinstance, hResInfo)
    pBuffer = LockResource(hMem)

    '创建文件句柄....

    '写到磁盘中...
    if ( WriteFile(hFile, byval pBuffer, nFileSize, dwBytesWritten, 0) <> 0 )
        call FlushFileBuffers(hFile)
   
    '关闭文件句柄...

    '释放内存对象句柄
    FreeResource(hMem)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值