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