IADsLargeInteger interface
Applies to: desktop apps only
The IADsLargeInteger interface is used to manipulate 64-bit integers of the LargeInteger type.
Members
The IADsLargeInteger interface inherits from the IDispatch interface. IADsLargeInteger also has these types of members:
Properties
The IADsLargeInteger interface has these properties.
| Property | Access type | Description |
|---|---|---|
| Read/write |
Gets and sets the upper 32 bits of the integer. | |
| Read/write |
Gets and sets the lower 32 bits of the integer. |
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
|
Minimum supported client | Windows 2000 Professional |
|---|---|
|
Minimum supported server | Windows 2000 Server |
|
Header |
|
|
DLL |
|
|
IID |
IID_IADsLargeInteger is defined as 9068270B-0939-11D1-8BE1-00C04FD8D503 |
See also
Send comments about this topic to Microsoft
Build date: 2/3/2012