diff -r 000000000000 -r 89d6a7a84779 Symbian3/SDK/Source/GUID-EA107811-240C-5F95-922B-7C042FA00A87.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/SDK/Source/GUID-EA107811-240C-5F95-922B-7C042FA00A87.dita Thu Jan 21 18:18:20 2010 +0000 @@ -0,0 +1,119 @@ + + + + + +Reading +a String Resource

The simplest use of a resource file involves reading string resources +and interpreting the source data.

+

Resources are defined in terms of structs which are accessed and +read by the RResourceFile class, and interpreted by the TResourceReader. +An application may also use resources from multiple files simultaneously. +See Resource File examples for +more information.

Consider a sample resource file where a struct of +STRING is defined having a single member of type LTEXT:

// define structures +STRUCT STRING + { + LTEXT text; + } +// define resources +RESOURCE STRING hello + { + text=Bonjour tout le monde!; + } +
+ + +Compile the resource file using the +resource compiler (rcomp) to generate an .rsc file +and an .rsg file. + + + .rsc file contains the resource data; this is +the resource file that must be referred to at run-time by the RResourceFile class +in the C++ code. + + + .rsg file is a generated + header file that contains #define statements +for each resource defined in the source file. In the resource file generated +here, the only resource is called hello and the generated +header file contains: +#define HELLO 1 +Note that the name in the generated header file is converted to upper +case. + + + + + #include the .rsg file in the +file containing the C++ code, to access the resource IDs generated by the +resource compiler. For example, for a project refered as ReadText, +this might be: +#include ReadText.rsg + + +Initialize the RResourceFile object in the C++ program, +specifying the name of the resource file: + +RResourceFile resourceFile; +resourceFile.OpenL( fsSession,_L( Z:\\system\\data\\ReadText.rsc ) ); +Note: To access the resource file contents, a session with the file +server must be started using an instance of RFs class. + + +Use one of the three functions (RResourceFile::AllocReadLC(), RResourceFile::AllocReadL() or RResourceFile::ReadL() to read a resource as shown in the following +code fragment: +HBufC8* dataBuffer = resourceFile.AllocReadLC( HELLO ); + + +Interpret the resource data using a TResourceReader object. +This provides access to the text string through a pointer descriptor as shown +in the following code fragment: + +TResourceReader theReader; +... +theReader.SetBuffer( datafBuffer ); +TPtrC textdata = reader.ReadTPtrC(); + + +

In this example, once the resource data is no longer needed, the +heap descriptor, dataBuffer, can be removed from the cleanup stack and destroyed +as shown in the code fragment:

CleanupStack::PopAndDestroy();

When +all operations on the resource file are complete, the resource file can be +closed using the RResourceFile::close() function as:

resourceFile.Close();
+Example

Consider a resource constructed +from the following definition.

RESOURCE ARRAY anarray +{ +items= + { + LBUF { txt="Esc"; }, + LBUF { txt="Enter"; }, + LBUF { txt="Tab"; }, + LBUF { txt="Del"; }, + LBUF { txt="Space"; } + }; +}

A TPtrC representing the second item can +be constructed using the ReadTPtrC() function. The example +simply takes the length of the text Enter:

// open the resource file +... +HBufC8* res = resourceFile.AllocReadLC( ANARRAY ); +TResourceReader theReader; +... +TInt len; +len = ( theReader.ReadTPtrC( 1,res ) ).Length(); // len == 5 +...
+
+Resource +files +Resource +file format +Resource +compilation +
\ No newline at end of file