LoadResData Function
Returns the data stored in a resource (.res) file.
Syntax
LoadResData(index, format)
Parameters
index(Required):IntegerorStringidentifying the resource- Can be a numeric ID or string name
- Must match the ID/name used when the resource was compiled
format(Required):Integerspecifying the format of the resource data- Custom user-defined format number (1-32767)
- Cannot use predefined formats (use
LoadResPicture/LoadResStringinstead)
Return Value
Returns a Byte array (Variant containing Byte array): - Contains the raw binary data from the resource file - Array is zero-based - Returns Empty if resource not found (in some VB versions) - May raise error 32813 if resource not found - Data is returned exactly as stored in .res file
Remarks
The LoadResData function loads custom binary data from resources:
- Loads custom data from compiled resource (.res) files
- Resource file must be linked to project at compile time
- Returns data as Byte array (
Variant/Byte()) - Used for custom binary resources (not bitmaps/icons/strings)
- For images, use
LoadResPictureinstead - For strings, use
LoadResStringinstead - Resource files created with Resource Editor or RC.EXE
- Index can be numeric ID or string name
- Format must be custom type (not 1=Cursor, 2=Bitmap, 3=Icon, etc.)
- Useful for embedding files (sounds, data, etc.)
- Data embedded in compiled EXE (no external files needed)
- More secure than external files (can't be easily modified)
- Faster access than loading from disk
- Resource file added via Project > Add File or in .vbp
- Only one resource file per project
- Changes to .res file require recompile
- Error 32813: "Resource not found" if ID/format don't match
- Error 48: "Error loading from file" if resource file corrupt
Typical Uses
- Load Binary Data
Dim data() As Byte
data = LoadResData(101, 256) ' Custom format 256
- Load Sound File
Dim wavData() As Byte
wavData = LoadResData("STARTUP_SOUND", 257)
- Load Configuration Data
Dim configData() As Byte
configData = LoadResData("CONFIG", 300)
- Load Binary Template
Dim template() As Byte
template = LoadResData(1001, 400)
- Load Custom File Type
Dim xmlData() As Byte
xmlData = LoadResData("SCHEMA", 500)
- Load Multiple Resources
For i = 1 To 5
data = LoadResData(i, 256)
ProcessData data
Next i
- Load Named Resource
Dim helpData() As Byte
helpData = LoadResData("HELP_FILE", 600)
- Conditional Loading
If useCustomTheme Then
themeData = LoadResData("DARK_THEME", 700)
End If
Basic Examples
Example 1: Loading and Using Binary Data
' Load binary data from resource
Dim resourceData() As Byte
resourceData = LoadResData(101, 256)
' Use the data
Dim fileNum As Integer
fileNum = FreeFile
Open "C:\output.dat" For Binary As #fileNum
Put #fileNum, , resourceData
Close #fileNum
Example 2: Loading Sound Data
' Load WAV file from resources
Dim wavData() As Byte
wavData = LoadResData("BEEP", 257)
' Play using Windows API
Call sndPlaySound(wavData(0), SND_ASYNC Or SND_MEMORY)
Example 3: Error Handling
On Error Resume Next
Dim data() As Byte
data = LoadResData(999, 256)
If Err.Number = 32813 Then
MsgBox "Resource not found!", vbCritical
Err.Clear
ElseIf Err.Number <> 0 Then
MsgBox "Error loading resource: " & Err.Description, vbCritical
Err.Clear
End If
Example 4: Converting to String
' Load text data stored as binary
Dim textData() As Byte
textData = LoadResData("README", 300)
' Convert byte array to string
Dim content As String
content = StrConv(textData, vbUnicode)
MsgBox content
Common Patterns
Pattern 1: SafeLoadResData
Function SafeLoadResData(ByVal resID As Variant, _
ByVal resFormat As Integer, _
ByRef outData() As Byte) As Boolean
On Error Resume Next
outData = LoadResData(resID, resFormat)
SafeLoadResData = (Err.Number = 0)
Err.Clear
End Function
Pattern 2: LoadResDataToFile
Sub LoadResDataToFile(ByVal resID As Variant, _
ByVal resFormat As Integer, _
ByVal filename As String)
Dim data() As Byte
Dim fileNum As Integer
data = LoadResData(resID, resFormat)
fileNum = FreeFile
Open filename For Binary As #fileNum
Put #fileNum, , data
Close #fileNum
End Sub
Pattern 3: GetResDataSize
Function GetResDataSize(ByVal resID As Variant, _
ByVal resFormat As Integer) As Long
On Error Resume Next
Dim data() As Byte
data = LoadResData(resID, resFormat)
If Err.Number = 0 Then
GetResDataSize = UBound(data) + 1
Else
GetResDataSize = 0
End If
End Function
Pattern 4: LoadResDataAsString
Function LoadResDataAsString(ByVal resID As Variant, _
ByVal resFormat As Integer) As String
Dim data() As Byte
data = LoadResData(resID, resFormat)
LoadResDataAsString = StrConv(data, vbUnicode)
End Function
Pattern 5: ResDataExists
Function ResDataExists(ByVal resID As Variant, _
ByVal resFormat As Integer) As Boolean
On Error Resume Next
Dim data() As Byte
data = LoadResData(resID, resFormat)
ResDataExists = (Err.Number = 0)
Err.Clear
End Function
Pattern 6: LoadMultipleResources
Function LoadMultipleResources(startID As Integer, _
endID As Integer, _
resFormat As Integer) As Collection
Dim col As New Collection
Dim i As Integer
Dim data() As Byte
On Error Resume Next
For i = startID To endID
data = LoadResData(i, resFormat)
If Err.Number = 0 Then
col.Add data
End If
Err.Clear
Next i
Set LoadMultipleResources = col
End Function
Pattern 7: CompareResData
Function CompareResData(ByVal resID1 As Variant, _
ByVal resID2 As Variant, _
ByVal resFormat As Integer) As Boolean
Dim data1() As Byte, data2() As Byte
Dim i As Long
data1 = LoadResData(resID1, resFormat)
data2 = LoadResData(resID2, resFormat)
If UBound(data1) <> UBound(data2) Then
CompareResData = False
Exit Function
End If
For i = 0 To UBound(data1)
If data1(i) <> data2(i) Then
CompareResData = False
Exit Function
End If
Next i
CompareResData = True
End Function
Pattern 8: CopyResDataToArray
Sub CopyResDataToArray(ByVal resID As Variant, _
ByVal resFormat As Integer, _
ByRef targetArray() As Byte)
Dim source() As Byte
Dim i As Long
source = LoadResData(resID, resFormat)
ReDim targetArray(LBound(source) To UBound(source))
For i = LBound(source) To UBound(source)
targetArray(i) = source(i)
Next i
End Sub
Pattern 9: LoadResDataWithFallback
Function LoadResDataWithFallback(ByVal primaryID As Variant, _
ByVal fallbackID As Variant, _
ByVal resFormat As Integer) As Byte()
On Error Resume Next
LoadResDataWithFallback = LoadResData(primaryID, resFormat)
If Err.Number <> 0 Then
Err.Clear
LoadResDataWithFallback = LoadResData(fallbackID, resFormat)
End If
End Function
Pattern 10: CachedResDataLoader
Dim resCache As New Collection
Function LoadResDataCached(ByVal resID As Variant, _
ByVal resFormat As Integer) As Byte()
Dim key As String
On Error Resume Next
key = CStr(resID) & "_" & CStr(resFormat)
' Try cache first
LoadResDataCached = resCache(key)
If Err.Number <> 0 Then
' Not in cache, load and cache it
Err.Clear
LoadResDataCached = LoadResData(resID, resFormat)
resCache.Add LoadResDataCached, key
End If
End Function
Advanced Examples
Example 1: Resource Manager Class
' Class: ResourceManager
Private m_cache As Collection
Private Sub Class_Initialize()
Set m_cache = New Collection
End Sub
Public Function LoadData(ByVal resID As Variant, _
ByVal resFormat As Integer) As Byte()
Dim key As String
On Error Resume Next
key = CStr(resID) & "_" & CStr(resFormat)
LoadData = m_cache(key)
If Err.Number <> 0 Then
Err.Clear
LoadData = LoadResData(resID, resFormat)
If Err.Number = 0 Then
m_cache.Add LoadData, key
Else
Err.Raise vbObjectError + 1000, "ResourceManager", _
"Failed to load resource"
End If
End If
End Function
Public Function GetAsString(ByVal resID As Variant, _
ByVal resFormat As Integer) As String
Dim data() As Byte
data = LoadData(resID, resFormat)
GetAsString = StrConv(data, vbUnicode)
End Function
Public Sub SaveToFile(ByVal resID As Variant, _
ByVal resFormat As Integer, _
ByVal filename As String)
Dim data() As Byte
Dim fileNum As Integer
data = LoadData(resID, resFormat)
fileNum = FreeFile
Open filename For Binary As #fileNum
Put #fileNum, , data
Close #fileNum
End Sub
Public Sub ClearCache()
Set m_cache = New Collection
End Sub
Private Sub Class_Terminate()
Set m_cache = Nothing
End Sub
Example 2: Sound Player with Resources
' Module with API declarations
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" ( _
lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Const SND_ASYNC = &H1
Private Const SND_MEMORY = &H4
' Sound resource IDs
Private Const RES_SOUND_BEEP = 101
Private Const RES_SOUND_CLICK = 102
Private Const RES_SOUND_ERROR = 103
Private Const RES_FORMAT_WAVE = 257
Public Sub PlayResourceSound(ByVal soundID As Integer)
Dim soundData() As Byte
On Error Resume Next
soundData = LoadResData(soundID, RES_FORMAT_WAVE)
If Err.Number = 0 Then
Call sndPlaySound(soundData(0), SND_ASYNC Or SND_MEMORY)
Else
Debug.Print "Sound not found: " & soundID
End If
End Sub
Public Sub PlayBeep()
PlayResourceSound RES_SOUND_BEEP
End Sub
Public Sub PlayClick()
PlayResourceSound RES_SOUND_CLICK
End Sub
Public Sub PlayError()
PlayResourceSound RES_SOUND_ERROR
End Sub
Example 3: Configuration Manager
' Class: ConfigManager
Private m_config As String
Public Sub LoadConfig()
Dim configData() As Byte
On Error Resume Next
' Try to load from resource
configData = LoadResData("CONFIG", 300)
If Err.Number = 0 Then
m_config = StrConv(configData, vbUnicode)
Else
' Use default config
m_config = GetDefaultConfig()
End If
Err.Clear
End Sub
Public Function GetSetting(ByVal key As String) As String
Dim lines() As String
Dim i As Long
Dim pos As Long
lines = Split(m_config, vbCrLf)
For i = 0 To UBound(lines)
If Left(lines(i), Len(key) + 1) = key & "=" Then
GetSetting = Mid(lines(i), Len(key) + 2)
Exit Function
End If
Next i
End Function
Private Function GetDefaultConfig() As String
GetDefaultConfig = "Version=1.0" & vbCrLf & _
"Language=English" & vbCrLf & _
"Theme=Default"
End Function
Example 4: Template Engine
' Class: TemplateEngine
Private Const RES_FORMAT_TEMPLATE = 400
Public Function ProcessTemplate(ByVal templateID As Variant, _
ParamArray values()) As String
Dim template As String
Dim data() As Byte
Dim i As Long
Dim result As String
' Load template from resources
data = LoadResData(templateID, RES_FORMAT_TEMPLATE)
template = StrConv(data, vbUnicode)
result = template
' Replace placeholders with values
For i = LBound(values) To UBound(values)
result = Replace(result, "{" & i & "}", CStr(values(i)))
Next i
ProcessTemplate = result
End Function
Public Function LoadTemplate(ByVal templateID As Variant) As String
Dim data() As Byte
data = LoadResData(templateID, RES_FORMAT_TEMPLATE)
LoadTemplate = StrConv(data, vbUnicode)
End Function
Public Function HasTemplate(ByVal templateID As Variant) As Boolean
On Error Resume Next
Dim data() As Byte
data = LoadResData(templateID, RES_FORMAT_TEMPLATE)
HasTemplate = (Err.Number = 0)
Err.Clear
End Function
Error Handling
' Error 32813: Resource not found
On Error Resume Next
data = LoadResData(999, 256)
If Err.Number = 32813 Then
MsgBox "Resource ID 999 not found!"
End If
' Error 48: Error loading from file
data = LoadResData(101, 256)
If Err.Number = 48 Then
MsgBox "Resource file is corrupt or missing!"
End If
' Safe loading with error handling
Function TryLoadResData(ByVal resID As Variant, _
ByVal resFormat As Integer, _
ByRef outData() As Byte) As Boolean
On Error Resume Next
outData = LoadResData(resID, resFormat)
TryLoadResData = (Err.Number = 0)
If Err.Number <> 0 Then
Debug.Print "Error loading resource: " & Err.Description
End If
Err.Clear
End Function
Performance Considerations
- Fast Access: Resources are embedded in EXE (very fast loading)
- Memory Overhead: Data loaded into memory when accessed
- No Caching: Each call loads fresh copy (implement caching if needed)
- Compile Time: Large resources increase EXE size and compile time
- One Resource File: Only one .res file per project (combine all resources)
- Array Copy: Returns copy of data (not reference)
Best Practices
- Always handle errors - resource might not exist
- Use constants for resource IDs and formats
- Cache frequently used data to avoid repeated loading
- Use meaningful names for string-based resource IDs
- Document resource IDs in code or separate file
- Keep resources organized by format number
- Test resource loading during development
- Validate data size after loading if needed
- Consider memory usage for large resources
- Use appropriate formats -
LoadResPicturefor images,LoadResStringfor text
Comparison with Related Functions
| Function | Purpose | Return Type | Data Type |
|---|---|---|---|
LoadResData |
Load custom binary data | Byte array | Any binary data |
LoadResPicture |
Load image from resources | StdPicture |
BMP, ICO, CUR |
LoadResString |
Load string from resources | String | Text strings |
LoadPicture |
Load image from file | StdPicture |
External file |
LoadResData vs LoadResPicture vs LoadResString
' LoadResData - custom binary data
Dim binData() As Byte
binData = LoadResData(101, 256)
' LoadResPicture - images
Picture1.Picture = LoadResPicture(101, vbResBitmap)
' LoadResString - strings
Dim msg As String
msg = LoadResString(101)
When to use each:
- LoadResData: Custom binary files, sound files, configuration data
- LoadResPicture: Images (bitmaps, icons, cursors)
- LoadResString: Localized text strings
Platform Notes
- Available in VB6 (not in early VB versions)
- Requires resource file (.res) linked to project
- Resource file created with Resource Editor or RC.EXE
- Only one resource file per project
- Resources embedded in compiled EXE/DLL
- Returns Variant containing Byte array
- Array is always zero-based (0 to n-1)
- Custom formats: 1-32767 (avoid predefined formats)
- Maximum resource size limited by available memory
Limitations
- One resource file: Only one .res file per project
- Compile time: Must recompile to update resources
- No modification: Cannot modify resources at runtime
- Limited tools: VB6 Resource Editor is basic
- Format restrictions: Cannot use predefined formats (1-16)
- No compression: Resources stored uncompressed in EXE
- No encryption: Resources easily extractable from EXE
- Memory copy: Always returns copy of data (not reference)
- Error messages: Limited error information
- No streaming: Entire resource loaded into memory
Related Functions
LoadResPicture: Load picture from resource fileLoadResString: Load string from resource fileLoadPicture: Load picture from external fileStrConv: Convert byte array to stringFreeFile: Get file number for saving resource data