【问题标题】:How does InvokeMember know about the HighPart property?InvokeMember 如何知道 HighPart 属性?
【发布时间】:2015-01-16 16:04:24
【问题描述】:

我想使用 System.Reflection 库而不是 ActiveDs。我在网上找到了将 LargeInteger 解析为 HighPart 和 LowPart 的代码。
我不完全理解,特别是“HighPart”和“LowPart”方法在哪里定义?这是在 Object 类中还是我必须定义它?

下面是解析 largeInteger 的代码:

de = new DirectoryEntry(curDomain,adUser,adPwd);        
object largeInteger = de.Properties["maxPwdAge"].Value;
System.Type type = largeInteger.GetType();
int high = (int)type.InvokeMember("HighPart", BindingFlags.GetProperty, null, largeInteger, null);
int low = (int)type.InvokeMember("LowPart", BindingFlags.GetProperty, null, largeInteger, null);

谢谢!

【问题讨论】:

    标签: reflection directoryservices directoryentry


    【解决方案1】:

    在 IADsLargeInteger 中定义,它是一个 COM 接口。

    http://msdn.microsoft.com/en-us/library/aa706037%28v=vs.85%29.aspx

    要摆脱 ActiveD,您可以自己定义类型(C#):

    [
    ComImport,
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
    Guid("9068270B-0939-11D1-8BE1-00C04FD8D503")
    ]
    public interface IADsLargeInteger
    {
        int HighPart{get;set;}
        int LowPart{get;set;}
    }
    
    private long? GetLargeInt(DirectoryEntry de, string attrName)
    {
        long? ret = null;
    
        IADsLargeInteger largeInt = de.Properties[attrName].Value as IADsLargeInteger;
        if (largeInt != null)
        {
            ret = (long)largeInt.HighPart << 32 | largeInt.LowPart;
        }
    
        return ret;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      相关资源
      最近更新 更多