VB6Parse / Library / Resources / loadresdata

VB6 Library Reference

LoadResData Function

Returns the data stored in a resource (.res) file.

Syntax

LoadResData(index, format)

Parameters

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:

Typical Uses

  1. Load Binary Data
Dim data() As Byte
data = LoadResData(101, 256) ' Custom format 256
  1. Load Sound File
Dim wavData() As Byte
wavData = LoadResData("STARTUP_SOUND", 257)
  1. Load Configuration Data
Dim configData() As Byte
configData = LoadResData("CONFIG", 300)
  1. Load Binary Template
Dim template() As Byte
template = LoadResData(1001, 400)
  1. Load Custom File Type
Dim xmlData() As Byte
xmlData = LoadResData("SCHEMA", 500)
  1. Load Multiple Resources
For i = 1 To 5
data = LoadResData(i, 256)
ProcessData data
Next i
  1. Load Named Resource
Dim helpData() As Byte
helpData = LoadResData("HELP_FILE", 600)
  1. 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

Best Practices

  1. Always handle errors - resource might not exist
  2. Use constants for resource IDs and formats
  3. Cache frequently used data to avoid repeated loading
  4. Use meaningful names for string-based resource IDs
  5. Document resource IDs in code or separate file
  6. Keep resources organized by format number
  7. Test resource loading during development
  8. Validate data size after loading if needed
  9. Consider memory usage for large resources
  10. Use appropriate formats - LoadResPicture for images, LoadResString for text
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

Limitations

← Back to Resources | View all functions