快速加载文件到流对象
来源:互联网 发布:开淘宝店货源怎么选择 编辑:程序博客网 时间:2024/06/15 19:44
(声明:魏滔序原创,转贴请注明出处。)
引用olelib.tlb (可以从http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip下载)
' Global Memory Flags
Private Const GMEM_MOVEABLE = &H2
Private Const GMEM_ZEROINIT = &H40
Private Const GENERIC_READ = &H80000000
Private Const FILE_SHARE_READ = &H1
Private Const OPEN_EXISTING = &H3
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Const S_OK = &H0
Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Type OVERLAPPED
Internal As Long
InternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long 'OVERLAPPED
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Sub LoadStreamFromFile(ByVal bstrFileName As String, ByRef pStream As IStream)
Dim hr As Long
Dim bReaded As Long
Dim hFile As Long
Dim dwFileSize As Long
Dim dwBytesRead As Long
Dim hGlobal As Long
Dim pvData As Long
Dim sa As SECURITY_ATTRIBUTES
With sa
.bInheritHandle = 0
.lpSecurityDescriptor = 0
.nLength = 0
End With
On Error Resume Next
hFile = CreateFile(bstrFileName, GENERIC_READ, FILE_SHARE_READ, sa, OPEN_EXISTING, FILE_ATTRIBUTE_TEMPORARY, 0)
If (hFile > 0) Then
dwFileSize = GetFileSize(hFile, 0)
If (dwFileSize > -1) Then
hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize)
End If
End If
If (hGlobal > 0) Then
pvData = GlobalLock(hGlobal)
If (pvData > 0) Then
bReaded = ReadFile(hFile, ByVal pvData, dwFileSize, dwBytesRead, 0&)
If (bReaded <> 0) Then
Set pStream = CreateStreamOnHGlobal(hGlobal, True)
pStream.Seek 0, 0
End If
GlobalUnlock (hGlobal)
End If
If (hr <> S_OK) Then
GlobalFree (hGlobal)
Set pStream = Nothing
End If
End If
If (hFile > 0) Then
CloseHandle (hFile)
End If
End Sub
- 快速加载文件到流对象
- 从文件中加载位图到 CBitmap对象
- 快速加载properties文件
- 利用swprintf_s快速加载对象
- 将文件加载到内存流
- 将内存中的对象写入到二进制文件,然后从文件中加载到内存
- 存储对象到文件
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- 一种快速加载大文件的方法
- Python 加载二进制文件到 CkByteArray 对象
- JQuery加载Json对象到form
- 将对象保存到文件
- 序列化对象到文件
- java对象保存到文件
- android 对象输出到文件
- 保存对象到文件中
- 将多个对象读写到文件
- 空(标识)接口的重要性
- 对MSDN中关于ToolboxBitmap属性补充
- CLSID与ProgID彼此间相互转换
- SMS学习笔记(一)
- 新世纪周刊:美剧的今世与前生
- 快速加载文件到流对象
- 中国独特词的英文表达(转)
- 编写高性能Web应用程序的10个入门技巧
- 显示字符串中所有字符的排列组合。
- 测试任务-软件开发各个阶段
- 《一个普通IT人的十年回顾》金旭亮
- serif vs sans serif
- Google Code Jam 2006赛果揭晓
- 测试用例设计方法的综合运用