Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

IADsLargeInteger interface (iads.h)

The IADsLargeInteger interface is used to manipulate 64-bit integers of the LargeInteger type.

Inheritance

The IADsLargeInteger interface inherits from the IDispatch interface.

Remarks

Handling the IADsLargeInteger in Visual Basic is made difficult by the fact that Visual Basic has no native unsigned numeric data type. This can cause errors in data conversion if either the LowPart or HighPart has the high bit set, which causes Visual Basic to handle the number as negative. The Visual Basic code examples below show how to properly handle the IADsLargeInteger in Visual Basic.

Examples

The following example shows how to convert an IADsLargeInteger object to a hex string.

Dim oDomain As IADs
Dim oLargeInt As LargeInteger

Set oDomain = GetObject("LDAP://DC=fabrikam,DC=com")
Set oLargeInt = oDomain.Get("creationTime")

Debug.Print oLargeInt.HighPart
Debug.Print oLargeInt.LowPart

strTemp = "&H" + CStr(Hex(oLargeInt.HighPart)) + _
 CStr(Hex(oLargeInt.LowPart))
Debug.Print strTemp

In Visual Basic, it is possible to convert an IADsLargeInteger objects that represents a date and/or time into a time Variant using the FileTimeToSystemTime and SystemTimeToVariantTime APIs. This is shown in the following code example.

Public Declare Function FileTimeToSystemTime Lib "kernel32" _
 (lpFileTime As FILETIME, _
 lpSystemTime As SYSTEMTIME) As Long

Public Declare Function SystemTimeToVariantTime Lib "oleaut32.dll" _
 (lpSystemTime As SYSTEMTIME, _
 dbTime As Double) As Long

Public Type SYSTEMTIME
 wYear As Integer
 wMonth As Integer
 wDayOfWeek As Integer
 wDay As Integer
 wHour As Integer
 wMinute As Integer
 wSecond As Integer
 wMilliseconds As Integer
End Type

Public Type FILETIME
 dwLowDateTime As Long
 dwHighDateTime As Long
End Type


' This function will convert the ADSI data type LargeInteger to
' a Variant time value in Greenwich Mean Time (GMT).
Function LargeInteger_To_Time(oLargeInt As LargeInteger, vTime As Variant)_
 As Boolean
 On Error Resume Next
 Dim pFileTime As FILETIME
 Dim pSysTime As SYSTEMTIME
 Dim dbTime As Double
 Dim lResult As Long
 
 If (oLargeInt.HighPart = 0 And oLargeInt.LowPart = 0) Then
 vTime = 0
 LargeInteger_To_Time = True
 Exit Function
 End If
 
 If (oLargeInt.LowPart = -1) Then
 vTime = -1
 LargeInteger_To_Time = True
 Exit Function
 End If
 
 pFileTime.dwHighDateTime = oLargeInt.HighPart
 pFileTime.dwLowDateTime = oLargeInt.LowPart
 
 ' Convert the FileTime to System time.
 lResult = FileTimeToSystemTime(pFileTime, pSysTime)
 If lResult = 0 Then
 LargeInteger_To_Time = False
 Debug.Print "FileTimeToSystemTime: " + Err.Number + " - "_
 + Err.Description
 Exit Function
 End If
 
 ' Convert System Time to a Double.
 lResult = SystemTimeToVariantTime(pSysTime, dbTime)
 If lResult = 0 Then
 LargeInteger_To_Time = False
 Debug.Print "SystemTimeToVariantTime: " + Err.Number + _
 " - " + Err.Description
 Exit Function
 End If
 
 ' Place the double in the variant.
 vTime = CDate(dbTime)
 LargeInteger_To_Time = True

End Function

The following example shows how to convert an IADsLargeInteger to a 64-bit integer.

HRESULT PrintAccountExpires(LPCWSTR pwszADsPath)
{
 if(!pwszADsPath)
 {
 return E_INVALIDARG;
 }
 
 HRESULT hr;
 CComPtr<IADs> spads;

 // Bind to the object.
 hr = ADsGetObject(pwszADsPath, IID_IADs, (LPVOID*)&spads);
 if(FAILED(hr))
 {
 return hr;
 }

 /*
 Get the accountExpires attribute, which is an
 IDispatch that contains an IADsLargeInteger.
 */
 CComVariant svar;
 hr = spads->Get(CComBSTR("accountExpires"), &svar);
 if(FAILED(hr))
 {
 return hr;
 }

 // Get the IADsLargeInteger interface.
 CComPtr<IADsLargeInteger> spli;
 hr = svar.pdispVal->QueryInterface(IID_IADsLargeInteger, 
 (LPVOID*)&spli);
 if(FAILED(hr))
 {
 return hr;
 }

 // Get the high and low parts of the value.
 long lHigh;
 long lLow;
 hr = spli->get_HighPart(&lHigh);
 hr = spli->get_LowPart(&lLow);

 // Convert the high and low parts to an __i64.
 __int64 i64;
 i64 = (ULONG)lHigh;
 i64 = (i64 << 32);
 i64 = i64 + (ULONG)lLow;
 
 // Print all of the values.
 wprintf(L"HighPart = %u, LowPart = %u, Combined = %I64d\n", 
 lHigh, lLow, i64);

 return hr;
}

Requirements

Requirement Value
Minimum supported client Windows Vista
Minimum supported server Windows Server 2008
Target Platform Windows
Header iads.h

See also

IADsLargeInteger Property Methods

IDispatch


Feedback

Was this page helpful?

Additional resources