2015-01-16 4 views
0

ActiveDs가 아닌 System.Reflection 라이브러리를 사용하려고합니다. LargeInteger를 HighPart와 LowPart로 파싱하는 웹에서이 코드를 발견했습니다.
완벽하게 이해하지 못합니다. 특히 'HighPart'및 'LowPart'메서드가 정의 된 곳은 어디입니까? 그것은 Object 클래스 내에 있습니까? 아니면 정의해야합니까?InvokeMember는 어떻게 HighPart 속성에 대해 알고 있습니까?

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); 

감사 :

는 아래 largeInteger을 구문 분석하는 코드입니다!

답변

1

COM 인터페이스 인 IADsLargeInteger에 정의되어 있습니다.

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

이 Activeds를 제거하려면 유형을 정의 할 수 있습니다 자신 (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; 
}