InvokeMember 如何知道 HighPart 属性?
How does InvokeMember know about the HighPart property?
我想使用 System.Reflection 库而不是 ActiveDs。我在网上找到了这段将 LargeInteger 解析为 HighPart 和 LowPart 的代码。
我完全不明白,特别是方法 'HighPart' 和 'LowPart' 定义在哪里?是在对象 class 中还是我必须定义它?
下面是解析 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);
谢谢!
在 IADsLargeInteger 中定义,它是一个 COM 接口。
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;
}
我想使用 System.Reflection 库而不是 ActiveDs。我在网上找到了这段将 LargeInteger 解析为 HighPart 和 LowPart 的代码。
我完全不明白,特别是方法 'HighPart' 和 'LowPart' 定义在哪里?是在对象 class 中还是我必须定义它?
下面是解析 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);
谢谢!
在 IADsLargeInteger 中定义,它是一个 COM 接口。
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;
}