2012-06-09 53 views

回答

2

有两种方法可以通过.NET检索uSNChanged属性:

  1. 包括对COM库的引用:“Active DS Type Library”,那么您需要使用IADsLargeInterger来检索该值并最终将其转换为longFor example

    IADsLargeInteger li_ad = (IADsLargeInteger)oUser.Properties["USNChanged"].Value; 
    long l_uChanged = GetLongFromLargeInteger(li_ad); 
    
    static long GetLongFromLargeInteger( IADsLargeInteger Li) 
    { 
        long retval = Li.HighPart; 
        retval <<=32; 
        retval |=(uint)Li.LowPart; 
        return retval; 
    } 
    
  2. 仅使用C#转换的值。由于Simon Gilbee,我们有这个选项:

    long usnChanged = CovertADSLargeIntegerToInt64(oUser.Properties["USNChanged"].Value); 
    
    public static Int64 ConvertADSLargeIntegerToInt64(object adsLargeInteger) 
    { 
        var highPart = (Int32)adsLargeInteger.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); 
        var lowPart = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); 
        return highPart * ((Int64)UInt32.MaxValue + 1) + lowPart; 
    } 
    

我强烈建议你选择2去避免问题与传统ActiveDs库,将不再需要答案关闭this list