home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-05-04 | 2.8 KB | 91 lines |
-
- import java.util.Date;
- import com.ms.dll.DllLib;
- import com.ms.win32.SYSTEMTIME;
-
-
- public class VarDateMarshaler
- {
- // DATE (double) is 8 bytes.
- public static int cbByValSize = 8;
-
- /** @dll.import( "oleaut32" ) */
- private static native boolean VariantTimeToSystemTime( double vtime,
- SYSTEMTIME lpSystemTime );
-
- /** @dll.import( "oleaut32" ) */
- private static native boolean SystemTimeToVariantTime(
- SYSTEMTIME lpSystemTime, double[] pvtime );
-
- public static Date toJava( int ppDATE, int flags )
- {
- int pDATE;
- double[] adblVarDate;
- SYSTEMTIME systemTime;
- Date dateRetVal;
-
- System.out.println( "in VarDateMarshaler.toJava()." );
-
- // get pointer to DATE value.
- pDATE = DllLib.read4( ppDATE );
-
- // get DATE value (as double).
- adblVarDate = new double[ 1 ];
- DllLib.copy( pDATE, adblVarDate, 0, 1 );
-
- systemTime = new SYSTEMTIME();
-
- // convert DATE value to SYSTEMTIME data.
- if( VariantTimeToSystemTime( adblVarDate[ 0 ], systemTime ) )
- {
- // convert SYSTEMTIME data to Date object.
- dateRetVal = new Date( (systemTime.wYear - 1900),
- (systemTime.wMonth - 1), systemTime.wDay, systemTime.wHour,
- systemTime.wMinute, systemTime.wSecond );
- }
- else
- {
- throw new RuntimeException(
- "VariantTimeToSystemTime returned false" );
- }
-
- return dateRetVal;
- }
-
- public static void copyToExternal( Date dateJava, int ppDATE, int flags )
- {
- SYSTEMTIME systemTime;
- double[] adblVarDate;
-
- System.out.println( "in VarDateMarshaler.copyToExternal()." );
-
- // initialize SYSTEMTIME data using values obtained from
- // the Date object.
- systemTime = new SYSTEMTIME();
- systemTime.wYear = (short)(dateJava.getYear() + 1900);
- systemTime.wMonth = (short)(dateJava.getMonth() + 1);
- systemTime.wDay = (short)dateJava.getDate();
- systemTime.wHour = (short)dateJava.getHours();
- systemTime.wMinute = (short)dateJava.getMinutes();
- systemTime.wSecond = (short)dateJava.getSeconds();
-
- adblVarDate = new double[ 1 ];
-
- // convert the SYSTEMTIME data to a DATE value.
- if( SystemTimeToVariantTime( systemTime, adblVarDate ) )
- {
- int pDATE;
-
- // get pointer to DATE value.
- pDATE = DllLib.read4( ppDATE );
-
- // set DATE value.
- DllLib.copy( adblVarDate, 0, pDATE, 1 );
- }
- else
- {
- throw new RuntimeException(
- "SystemTimeToVariantTime returned false" );
- }
- }
- }