/************************************************************************** THIS CODE AND INFORMATION IS PROVIDED 'AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. Copyright 1998 Microsoft Corporation. All Rights Reserved. **************************************************************************/ /************************************************************************** File: strblock.h Description: Programmer's interface to manipulate a block of string resources. It defines an API with functions to Create, Access, Modify & Destroy a string block. **************************************************************************/ #ifndef _STRBLOCK_H #define _STRBLOCK_H #include // The number of strings in a block. The string resource is internally // stored as blocks of NO_OF_STRINGS_PER_BLOCK ( = 16) strings. A block // is the smallest granularity for manipulating a string resource. #define NO_OF_STRINGS_PER_BLOCK 16 // Error codes for operations on a string block. typedef enum { STRBLOCKERR_OK, // The last operation was successful. STRBLOCKERR_NOMEMORY, // The last operation on the block failed due to inadequate memory. STRBLOCKERR_INVALIDINDEX, // The index passed was incorrect. STRBLOCKERR_UPDATEFAILED, // The specified app could not be updated. STRBLOCKERR_APPLOADFAILED, // The specified app could not be loaded. STRBLOCKERR_RESNOTFOUND, // The specified resource could not be located. STRBLOCKERR_LOADRESFAILED, // The specified resource could not be loaded. STRBLOCKERR_INVALIDBLOCK, // The specified block handle is invalid. STRBLOCKERR_STRINVALID, // The string pointer passed was invalid. STRBLOCKERR_UPDATENOTIMPLEMENTED, // UpdateResource not implemented. STRBLOCKERR_UNKNOWN // An unspecified error. } STRBLOCKERR; // Handle to a block of string. We hide the internal format we use for manipulating // a string resource by providing access to it through a handle. DECLARE_HANDLE(HSTRBLOCK); // Methods to access a string block. // Function: HSTRBLOCK WINAPI GetStringBlockA( LPCSTR strAppName, UINT nBlockID, // WORD wLangID ); // Purpose: Get the block of string with the specified ID & language from the // specified application (ANSI version). // LPCSTR strAppName: The name of the application. // UINT nBlockID: The ID of the block. // WORD wLangID: The language identifier. You can create a language // identifier using the macro, MAKELANGID. // Returns: Handle to a string block if successful, NULL otherwise. // Comments: This function creates a string block. Call DeleteStringBlock() // when you no longer need the block. HSTRBLOCK WINAPI GetStringBlockA( LPCSTR strAppName, UINT nBlockID, WORD wLangID ); // Function: HSTRBLOCK WINAPI GetStringBlockW( LPCWSTR strAppName, UINT nBlockID, // WORD wLangID ); // Purpose: Get the block of string with the specified ID & language from the // specified application (UNICODE version). // LPCWSTR strAppName: The name of the application. // UINT nBlockID: The ID of the block. // WORD wLangID: The language identifier. You can create a language // identifier using the macro, MAKELANGID. // Returns: Handle to a string block if successful, NULL otherwise. // Comments: This function creates a string block. Call DeleteStringBlock() // when you no longer need the block. HSTRBLOCK WINAPI GetStringBlockW( LPCWSTR strAppName, UINT nBlockID, WORD wLangID ); // Function: BOOL WINAPI DeleteStringBlock( HSTRBLOCK hStrBlock ); // Purpose: Delete a block of string. // HSTRBLOCK hStrBlock: The handle to the block. // Returns: TRUE if successful, FALSE on failure. // Comments: Call this function when you no longer need a block. Calling this function // frees the memory occupied by the block. Failure to delete a block // results in memory leaks. BOOL WINAPI DeleteStringBlock( HSTRBLOCK hStrBlock ); // Function: int WINAPI GetStringLength( HSTRBLOCK hStrBlock, UINT nIndex ); // Purpose: Get the length of a string in the block. // HSTRBLOCK hStrBlock: The handle to the string block. // UINT nIndex: The zero-based index of the string in the block. The index can be // any value from 0 thru' (NO_OF_STRINGS_PER_BLOCK - 1). // Returns: If successful, the string length in number of characters, excluding the terminating // NULL character; -1 if the function fails. // Comments: Call this function to get the string length before calling GetString. int WINAPI GetStringLength( HSTRBLOCK hStrBlock, UINT nIndex ); // Function: BOOL WINAPI GetStringA( HSTRBLOCK hStrBlock, UINT nIndex, LPSTR pszStr ); // Purpose: Get the string at the specified index in the block (ANSI version). // HSTRBLOCK hStrBlock: The handle to the string block. // UINT nIndex: The zero-based index of the string in the block. The index can be a value // from 0 through (NO_OF_STRINGS_PER_BLOCK - 1). // LPSTR pszStr: The pointer to the memory to which the string requested will be copied. // This memory should be large enough to contain the string. // Returns: TRUE on success, FALSE otherwise. // Comments: Before calling this function, call GetStringLength() to get the string length. BOOL WINAPI GetStringA( HSTRBLOCK hStrBlock, UINT nIndex, LPSTR pszStr ); // Function: BOOL WINAPI GetStringW( HSTRBLOCK hStrBlock, UINT nIndex, LPWSTR pszStr ); // Purpose: Get the string at the specified index in the block (UNICODE version). // HSTRBLOCK hStrBlock: The handle to the string block. // UINT nIndex: The zero-based index of the string in the block. The index can be a value // from 0 through (NO_OF_STRINGS_PER_BLOCK - 1). // LPSTR pszStr: The pointer to the memory to which the string requested will be copied. // This memory should be large enough to contain the string. // Returns: TRUE on success, FALSE otherwise. // Comments: Before calling this function, call GetStringLength() to get the string length. BOOL WINAPI GetStringW( HSTRBLOCK hStrBlock, UINT nIndex, LPWSTR pszStr ); // Function: BOOL WINAPI SetStringA( HSTRBLOCK hStrBlock, UINT nIndex, LPCSTR pszText ); // Purpose: Change the string at the specified index in the block (ANSI version). // HSTRBLOCK hStrBlock: The handle to the string block. // UINT nIndex: The zero-based index of the string in the block. The index can be a value // from 0 through (NO_OF_STRINGS_PER_BLOCK - 1). // LPCSTR pszText: The pointer to the new string. // Returns: TRUE on success, FALSE otherwise. BOOL WINAPI SetStringA( HSTRBLOCK hStrBlock, UINT nIndex, LPCSTR pszText ); // Function: BOOL WINAPI SetStringW( HSTRBLOCK hStrBlock, UINT nIndex, LPCWSTR pszStr ); // Purpose: Change the string at the specified index in the block (UNICODE version). // HSTRBLOCK hStrBlock: The handle to the string block. // UINT nIndex: The zero-based index of the string in the block. The index can be a value // from 0 through (NO_OF_STRINGS_PER_BLOCK - 1). // LPCWSTR pszText: The pointer to the new string. // Returns: TRUE on success, FALSE otherwise. BOOL WINAPI SetStringW( HSTRBLOCK hStrBlock, UINT nIndex, LPCWSTR pszText ); // Function: int WINAPI GetFirstStringID( HSTRBLOCK hStrBlock ); // Purpose: Get the ID of the first string in the block. // HSTRBLOCK hStrBlock: The handle to the string block. // Returns: The ID of the first string in the block. -1 if the function fails. int WINAPI GetFirstStringID( HSTRBLOCK hStrBlock ); // Function: int WINAPI GetBlockID( HSTRBLOCK hStrBlock ); // Purpose: Get the ID of the string block. This is the ID of the string block that was // specified when the block was created. // HSTRBLOCK hStrBlock: The handle to the string block. // Returns: The block ID, if sucessful, or -1 on failure. int WINAPI GetBlockID( HSTRBLOCK hStrBlock ); // Function: WORD WINAPI GetBlockLanguage( HSTRBLOCK hStrBlock ); // Purpose: Get the identifier of the language for the string block. This is the language ID // specified when the block was created. // HSTRBLOCK hStrBlock: The handle to the string block. // Returns: The language ID of the block, if successful; 0 on failure. // Comments: For info on language IDs, refer help of MAKELANGID. WORD WINAPI GetBlockLanguage( HSTRBLOCK hStrBlock ); // Function: BOOL WINAPI UpdateStringBlockA( LPCSTR strAppName, HSTRBLOCK hStrBlock, // int nBlockID, WORD wLangID ); // Purpose: Update the block of string resource in the specified application // (ANSI version). // LPCTSTR strAppName: The name of the application whose string resource has to be updated. // HSTRBLOCK hStrBlock: The handle to the block that contains the new strings. // int nBlockID: The ID of the block to update in the app. If it is -1, use the same block // ID as that of hStrBlock. // WORD wLangID: The identifier of the language whaose string block has to be updated. If this // value is 0, use the same language as that of hStrBlock. // Returns: TRUE on success, FALSE on failure. BOOL WINAPI UpdateStringBlockA( LPCSTR strAppName, HSTRBLOCK hStrBlock, int nBlockID, WORD wLangID ); // Function: BOOL WINAPI UpdateStringBlockW( LPCWTR strAppName, HSTRBLOCK hStrBlock, // int nBlockID, WORD wLangID ); // Purpose: Update the block of string resource in the specified application // (UNICODE version). // LPCTSTR strAppName: The name of the application whose string resource has to be updated. // HSTRBLOCK hStrBlock: The handle to the block that contains the new strings. // int nBlockID: The ID of the block to update in the app. If it is -1, use the same block // ID as that of hStrBlock. // WORD wLangID: The identifier of the language whaose string block has to be updated. If this // value is 0, use the same language as that of hStrBlock. // Returns: TRUE on success, FALSE on failure. BOOL WINAPI UpdateStringBlockW( LPCWSTR strAppName, HSTRBLOCK hStrBlock, int nBlockID, WORD wLangID ); // Function: STRBLOCKERR WINAPI GetStringBlockError(); // Purpose: Get the error status of the last string block action. // Returns: The error status of the last operation on the specified block. // Comments: The error code is maintained on a per-thread basis. Multiple threads do not // overwrite each other's last block error code. STRBLOCKERR WINAPI GetStringBlockError(); #ifdef UNICODE #define GetStringBlock GetStringBlockW #define GetString GetStringW #define SetString SetStringW #define UpdateStringBlock UpdateStringBlockW #else #define GetStringBlock GetStringBlockA #define GetString GetStringA #define SetString SetStringA #define UpdateStringBlock UpdateStringBlockA #endif // UNICODE #endif // _STRBLOCK_H