One way around this limitation is to use a Resource Only Object Server (ROOS). A ROOS is simply an ActiveX component that has the sole purpose of returning data from its own resource file. The ROOS should contain methods to extract data from its internal resource file. You can add all sorts of functionality, such as giving the ROOS the ability to parse tokens and return fully qualified strings. This is similar to how many Microsoft applications work. For example, a ROOS's resource file might contain an entry like this:
IDS_ERROR_BADFILEOPEN "Could not open the file %1, %2"
Calling the ROOS method, you could then code:
Dim sFileName As String Dim vRoosParams As Variant Dim oROOS As MyROOS On Error Resume Next sFileName = "C:\MYFILE.TXT" Open sFileName For Input As #1 If Err.Number <> 0 Then Set oROOS = New MyROOS ReDim vRoosParams(0 to 1) VRoosParams(0) = sFileName VRoosParams(1) = Err.Description MsgBox oROOS.GetString(IDS_ERROR_BADFILEOPEN, vRoosParams), _ vbExclamation End If
In this example, an error 53 (File not found) would result in the following message: "Could not open the file C:\MYFILE.TXT, File not found." The ROOS code will in fact be base code that never needs to change. It simply provides an access method to the underlying resource file and gives you parsing functionality. You simply need to create the resource file for the project, attach it to the ROOS, and compile a DLL. You can compile each ROOS with a different class name, like ProjectXROOS or ProjectYROOS for whatever project you are using. This gives you the ability to use multiple resource files within any particular project. Chapter 14 gives a detailed example of how you might build a ROOS.