【作品提交】适用于文件和内存的Hash计算器
抱歉,这是开发的工具软件中的一个,没打算开源,故无法提供源代码。大赛并未
规定提供完整的源代码,不算违规。遗憾的是忘了提交日期。
这里有其中的一个function,供demo之用。很多人写程序都是不注意细节和格式的,
交流起来就达不到共同提高的目的。
// *--------------------------------------------------------------------------------------------------------------
// copy string to clipboard
extern HRESULT WINAPI Base_CopyMsgToClipboardW(
__deref_in LPCWSTR pwszMsg )
{
HRESULT hr = S_OK;
HGLOBAL hClipBuffer = INVALID_HANDLE_VALUE;
WCHAR* wszChar = NULL;
size_t dwSize = 0;
if( NULL == pwszMsg )
return E_INVALIDARG;
if( 0 == OpenClipboard( GetForegroundWindow() ) ||
0 == EmptyClipboard( ) ||
FAILED( hr = StringCbLengthW( pwszMsg, (DWORD)-1, &dwSize ) ) )
{
hr = HRESULT_FROM_LAST_ERROR();
goto Done;
}
if( NULL == (hClipBuffer = GlobalAlloc( GMEM_DDESHARE | GMEM_MOVEABLE, dwSize + 10 ) ) ||
NULL == ( wszChar = (WCHAR*) GlobalLock( hClipBuffer ) ) )
{
hr = HRESULT_FROM_LAST_ERROR();
goto Done;
}
#pragma warning( disable : 6386 ) // VS2005: disable warning as we know it's safe: a bug in VS2005?
StringCchCopyW( wszChar, (dwSize + 10)/2, pwszMsg );
#pragma warning( default : 6386 )
GlobalUnlock( hClipBuffer );
if( NULL == SetClipboardData( CF_UNICODETEXT, hClipBuffer ) ||
0 == CloseClipboard() )
hr = HRESULT_FROM_LAST_ERROR();
Done:
if( INVALID_HANDLE_VALUE != hClipBuffer &&
NULL != GlobalFree( hClipBuffer ) )
hr = HRESULT_FROM_LAST_ERROR();
return hr;
}
// *--------------------------------------------------------------------------------------------------------------
extern __inline HRESULT HRESULT_FROM_LAST_ERROR( VOID )
{
DWORD dwError = GetLastError();
return HRESULT_FROM_WIN32( dwError );
}
