home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 39 / IOPROG_39.ISO / SOFT / sdkjava40.exe / data1.cab / fg_Samples / Samples / COM / CustomMarshal / vardate / VarDateMarshaler.java < prev   
Encoding:
Java Source  |  2000-05-04  |  2.8 KB  |  91 lines

  1.  
  2. import java.util.Date;
  3. import com.ms.dll.DllLib;
  4. import com.ms.win32.SYSTEMTIME;
  5.  
  6.  
  7. public class VarDateMarshaler
  8. {
  9.     // DATE (double) is 8 bytes.
  10.     public static int cbByValSize = 8;
  11.  
  12.     /** @dll.import( "oleaut32" ) */
  13.     private static native boolean VariantTimeToSystemTime( double vtime,
  14.         SYSTEMTIME lpSystemTime );
  15.  
  16.     /** @dll.import( "oleaut32" ) */
  17.     private static native boolean SystemTimeToVariantTime(
  18.         SYSTEMTIME lpSystemTime, double[] pvtime );
  19.         
  20.     public static Date toJava( int ppDATE, int flags )
  21.     {
  22.         int         pDATE;
  23.         double[]    adblVarDate;
  24.         SYSTEMTIME  systemTime;
  25.         Date        dateRetVal;
  26.  
  27.         System.out.println( "in VarDateMarshaler.toJava()." );
  28.  
  29.         // get pointer to DATE value.
  30.         pDATE = DllLib.read4( ppDATE );
  31.  
  32.         // get DATE value (as double).
  33.         adblVarDate = new double[ 1 ];
  34.         DllLib.copy( pDATE, adblVarDate, 0, 1 );
  35.  
  36.         systemTime = new SYSTEMTIME();
  37.  
  38.         // convert DATE value to SYSTEMTIME data.
  39.         if( VariantTimeToSystemTime( adblVarDate[ 0 ], systemTime ) )
  40.         {
  41.             // convert SYSTEMTIME data to Date object.
  42.             dateRetVal = new Date( (systemTime.wYear - 1900),
  43.                 (systemTime.wMonth - 1), systemTime.wDay, systemTime.wHour,
  44.                 systemTime.wMinute, systemTime.wSecond );
  45.         }
  46.         else
  47.         {
  48.             throw new RuntimeException(
  49.                 "VariantTimeToSystemTime returned false" );
  50.         }
  51.  
  52.         return dateRetVal;
  53.     }
  54.  
  55.     public static void copyToExternal( Date dateJava, int ppDATE, int flags )
  56.     {        
  57.         SYSTEMTIME  systemTime;
  58.         double[]    adblVarDate;
  59.  
  60.         System.out.println( "in VarDateMarshaler.copyToExternal()." );
  61.  
  62.         // initialize SYSTEMTIME data using values obtained from
  63.         //  the Date object.
  64.         systemTime = new SYSTEMTIME();
  65.         systemTime.wYear = (short)(dateJava.getYear() + 1900);
  66.         systemTime.wMonth = (short)(dateJava.getMonth() + 1);
  67.         systemTime.wDay = (short)dateJava.getDate();
  68.         systemTime.wHour = (short)dateJava.getHours();
  69.         systemTime.wMinute = (short)dateJava.getMinutes();
  70.         systemTime.wSecond = (short)dateJava.getSeconds();
  71.  
  72.         adblVarDate = new double[ 1 ];
  73.  
  74.         // convert the SYSTEMTIME data to a DATE value.
  75.         if( SystemTimeToVariantTime( systemTime, adblVarDate ) )
  76.         {
  77.             int pDATE;
  78.  
  79.             // get pointer to DATE value.
  80.             pDATE = DllLib.read4( ppDATE );
  81.  
  82.             // set DATE value.
  83.             DllLib.copy( adblVarDate, 0, pDATE, 1 );
  84.         }
  85.         else
  86.         {
  87.             throw new RuntimeException(
  88.                 "SystemTimeToVariantTime returned false" );
  89.         }
  90.     }
  91. }