Resolving Run-Time Error ‘372’ (MSCOMCTL.OCX) in BusyWin & VB6 Applications: Complete Technical Guide
Run-time errors in legacy Windows applications—especially those built on Visual Basic 6 (VB6)—are still very common in business environments. One such freque...
Run-time errors in legacy Windows applications—especially those built on Visual Basic 6 (VB6)—are still very common in business environments. One such frequent issue is:
Run-time error ‘372’: Failed to load control ‘ImageList’ from MSCOMCTL.OCX
This error typically appears in applications like Busy Accounting Software, older ERP tools, and custom VB6-based systems. It is directly related to a missing, outdated, or improperly registered MSCOMCTL.OCX file.
This article provides a complete technical explanation, root causes, and step-by-step solutions to permanently fix the issue.
What is MSCOMCTL.OCX?
MSCOMCTL.OCX (Microsoft Common Controls) is a VB6 ActiveX control library that provides UI components such as:
- ImageList
- ListView
- TreeView
- ProgressBar
- Toolbar
These controls are widely used in older Windows desktop applications.
Understanding Run-Time Error ‘372’
Error Description
Run-time error '372':
Failed to load control 'ImageList' from MSCOMCTL.OCX
Technical Meaning
The application is trying to load a UI component (ImageList), but:
- The required OCX file is missing
- The version installed is incompatible
- The OCX is not registered in Windows registry
Root Causes of the Error
1. Missing MSCOMCTL.OCX
- File not present in system directories
2. Unregistered OCX File
-
File exists but not registered using
regsvr32
3. Version Mismatch
- Application expects a specific version
- Windows update replaced it with incompatible version
4. Corrupted OCX File
- Damaged during system crash or improper installation
5. 64-bit vs 32-bit Conflict
- VB6 apps are 32-bit, but running on 64-bit OS
6. Permission Issues
- Lack of admin rights during registration
System Architecture Understanding
| Component | Requirement |
|---|---|
| Application | 32-bit (VB6) |
| OS | 32-bit or 64-bit |
| OCX Location (64-bit OS) | C:\Windows\SysWOW64\ |
| OCX Location (32-bit OS) | C:\Windows\System32\ |
⚠️ Important:
On 64-bit Windows, SysWOW64 is used for 32-bit files
Step-by-Step Solution
Step 1: Obtain Correct MSCOMCTL.OCX
-
Use original file from:
- Working system
- Application installation folder
- VB6 Runtime package
Step 2: Copy File to System Directory
For 64-bit Windows:
C:\Windows\SysWOW64\
For 32-bit Windows:
C:\Windows\System32\
Step 3: Register the OCX File
Open Command Prompt as Administrator
For 64-bit:
regsvr32 C:\Windows\SysWOW64\MSCOMCTL.OCX
For 32-bit:
regsvr32 C:\Windows\System32\MSCOMCTL.OCX
✅ Expected Output:
DllRegisterServer in MSCOMCTL.OCX succeeded
Step 4: Restart Application
- Close BusyWin
- Reopen application
Advanced Troubleshooting
✔ Re-register OCX
regsvr32 /u MSCOMCTL.OCX
regsvr32 MSCOMCTL.OCX
✔ Install VB6 Runtime (SP6)
- Includes updated dependencies
✔ Run Application as Administrator
- Fixes permission-related issues
✔ Compatibility Mode
- Set to Windows 7 / Windows XP
✔ Check Windows Updates
- Some updates overwrite OCX files
✔ Use Dependency Walker (Advanced)
- Identify missing DLL dependencies
Server Environment Considerations
In multi-user setups (like yours with Busy + Tally):
-
Ensure OCX is installed on:
- Server
- All client machines
-
If using RDP:
- Register OCX on remote server
-
For domain environments:
- Check group policies restricting OCX registration
Best Practices
- Maintain a backup of working OCX files
- Avoid random downloads from unsafe sources
- Use official runtime packages
- Document system dependencies during deployment
Conclusion
Run-time error ‘372’ is a classic issue in VB6-based systems, but it is easy to fix with proper understanding of:
- OCX file management
- System architecture
- Registration process
By following the steps above, you can ensure smooth operation of BusyWin and similar applications in both standalone and server environments.