Back
#include "StdAfx.h"
#include "PSLUtilities.h"
#include "ProSysModule.h"
ABIG CPSLUtilities::GetVariantBig(LPVARIANT pVar, bool * pError)
{
try
{
if(pError)
*pError = true;
ABIG value = _variant_t(pVar);
if(pError)
*pError = false;
return value;
}
catch(...)
{
}
return 0;
}
void CPSLUtilities::SetVariantBig(LPVARIANT pVar, ABIG Value)
{
::VariantInit(pVar);
#ifdef _WIN64
pVar->vt = VT_UI8;
pVar->ullVal = Value;
#else
pVar->vt = VT_UI4;
pVar->ulVal = Value;
#endif
}
void CPSLUtilities::SetVariant64Bit(LPVARIANT pVar, BIG64 Value)
{
::VariantInit(pVar);
#ifdef _WIN64
pVar->vt = VT_UI8;
pVar->ullVal = Value;
#else
if(_Module.IsWin2000()) // Windows 2000 doesn't support VT_UI8;
{
pVar->vt = VT_UI4;
pVar->ulVal = (ULONG)Value;
}
else
{
pVar->vt = VT_UI8;
pVar->ullVal = Value;
}
#endif
}
void CPSLUtilities::GetLongFilePathDetails(LPCTSTR sPath, _bstr_t & filePath, _bstr_t & fileDir, _bstr_t & fileName)
{
tstring sBuffer = sPath;
sBuffer.resize(MAX_FILE_PATH);
DWORD dwSize = ::GetLongPathName(sPath, (LPTSTR)sBuffer.c_str(), MAX_FILE_PATH);
if(dwSize > 0)
{
sBuffer.resize(dwSize);
tstring tmp;
tmp.resize(dwSize);
size_t idx = sBuffer.rfind('\\');
if(idx > 0)
{
LPTSTR pSource = (LPTSTR)sBuffer.c_str();
LPTSTR pDest = (LPTSTR)tmp.c_str();
::_tcsncpy_s(pDest, dwSize + 1, pSource, dwSize);
filePath = pDest;
::_tcsncpy_s(pDest, dwSize + 1, pSource, idx);
fileDir = pDest;
::_tcsncpy_s(pDest, dwSize + 1, pSource + idx + 1, dwSize - idx);
fileName = pDest;
}
}
}
Top |