You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.2 KiB
110 lines
3.2 KiB
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1999-2002 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
// GlobalFuncs.cpp
|
|
//
|
|
// Description:
|
|
// Contains the definitions of a few unrelated global functions
|
|
//
|
|
// Maintained By:
|
|
// David Potter (DavidP) 25-MAR-2002
|
|
// Vij Vasu (Vvasu) 06-SEP-2000
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Include Files
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
// The precompiled header.
|
|
#include "Pch.h"
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// DwLoadString()
|
|
//
|
|
// Description:
|
|
// Allocate memory for and load a string from the string table.
|
|
//
|
|
// Arguments:
|
|
// uiStringIdIn
|
|
// Id of the string to look up
|
|
//
|
|
// rsszDestOut
|
|
// Reference to the smart pointer to the loaded string.
|
|
//
|
|
// Return Value:
|
|
// S_OK
|
|
// If the call succeeded
|
|
//
|
|
// Other Win32 error codes
|
|
// If the call failed.
|
|
//
|
|
// Remarks:
|
|
// This function cannot load a zero length string.
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
DWORD
|
|
DwLoadString(
|
|
UINT nStringIdIn
|
|
, SmartSz & rsszDestOut
|
|
)
|
|
{
|
|
TraceFunc( "" );
|
|
|
|
DWORD dwError = ERROR_SUCCESS;
|
|
|
|
UINT uiCurrentSize = 0;
|
|
SmartSz sszCurrentString;
|
|
UINT uiReturnedStringLen = 0;
|
|
|
|
do
|
|
{
|
|
// Grow the current string by an arbitrary amount.
|
|
uiCurrentSize += 256;
|
|
|
|
sszCurrentString.Assign( new WCHAR[ uiCurrentSize ] );
|
|
if ( sszCurrentString.FIsEmpty() )
|
|
{
|
|
dwError = TW32( ERROR_NOT_ENOUGH_MEMORY );
|
|
TraceFlow2( "Error %#x occurred trying allocate memory for string (string id is %d).", dwError, nStringIdIn );
|
|
LogMsg( "Error %#x occurred trying allocate memory for string (string id is %d).", dwError, nStringIdIn );
|
|
break;
|
|
} // if: the memory allocation has failed
|
|
|
|
uiReturnedStringLen = ::LoadStringW(
|
|
g_hInstance
|
|
, nStringIdIn
|
|
, sszCurrentString.PMem()
|
|
, uiCurrentSize
|
|
);
|
|
|
|
if ( uiReturnedStringLen == 0 )
|
|
{
|
|
dwError = TW32( GetLastError() );
|
|
TraceFlow2( "Error %#x occurred trying load string (string id is %d).", dwError, nStringIdIn );
|
|
LogMsg( "Error %#x occurred trying load string (string id is %d).", dwError, nStringIdIn );
|
|
break;
|
|
} // if: LoadString() had an error
|
|
|
|
++uiReturnedStringLen;
|
|
}
|
|
while( uiCurrentSize <= uiReturnedStringLen );
|
|
|
|
if ( dwError == ERROR_SUCCESS )
|
|
{
|
|
rsszDestOut = sszCurrentString;
|
|
} // if: there were no errors in this function
|
|
else
|
|
{
|
|
rsszDestOut.PRelease();
|
|
} // else: something went wrong
|
|
|
|
RETURN( dwError );
|
|
|
|
} //*** DwLoadString()
|