自定义资源生成EXE文件

    技术2022-05-11  46

    我使用资源编辑器添加了一个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 ByteDim lpFileSize As Long, i As LongDim iFileNum As LongiFileNum = FreeFilelpFileTemp = LoadResData(101, "CUSTOM")Open lpFileName For Binary As #iFileNumPut #iFileNum, , lpFileTempClose #iFileNum

     暴风雨正解

    Open lpFileName For Binary As #1Put #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)