ディレクトリ サービス オブジェクトの "uSNChanged" 値の Int64 値を取得しようとしています。残念ながら、それは常にある種の COM オブジェクトとして返されます。Int64 へのキャスト、Int64.Parse() の呼び出し、Convert.ToInt64() の呼び出しを試しました。これらのどれも機能しません。
特定の DirectoryEntry オブジェクトについて、このコードはプロパティを表示します。
private static void DisplaySelectedProperties(DirectoryEntry objADObject)
{
try
{
string[] properties = new string[] {
"displayName",
"whenCreated",
"whenChanged",
"uSNCreated",
"uSNChanged",
};
Console.WriteLine(String.Format("Displaying selected properties of {0}", objADObject.Path));
foreach (string strAttrName in properties)
{
foreach (var objAttrValue in objADObject.Properties[strAttrName])
{
string strAttrValue = objAttrValue.ToString();
Console.WriteLine(String.Format(" {0, -22} : {1}", strAttrName, strAttrValue));
}
}
Console.WriteLine();
}
catch (Exception ex)
{
throw new ApplicationException(string.Format("Fatal error accessing: {0} - {1}", objADObject.Path, ex.Message), ex);
}
}
これは出力です:
LDAP://server/o=org/cn=obj の選択されたプロパティの表示 displayName : 表示名 whenCreated : 2009 年 7 月 8 日 7:29:02 PM 変更日時: 2009 年 7 月 8 日 10:42:23 PM uSNCreated : System.__ComObject uSNChanged : System.__ComObject
その System.__ComObject を Int64 に変換するにはどうすればよいですか?
使用したソリューション:
これは、以下の marc_s のソリューションに基づいて使用したソリューションです。
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;
}