Думаю, я понял это. Я использовал только VBA, поэтому вам нужно «обдумать» его ограничения, он будет следовать той же схеме в VB.NET.
Сигнатура функции такова:
Function GetNamesFromIDs(MAPIProp As Unknown, PropTag As Long) As NamedProperty
В качестве первого параметра требуется объект, который поддерживает интерфейс IUnknown
. Изучив документы Redemption, стало ясно, что существует интерфейс с именем _MAPIProp
, из которого получены многие другие объекты RDO (среди них IRDOMail
). Так что это, должно быть, тот самый RDOMail
, из которого вы пытаетесь получить данные.
Зная это, ему понадобился только один тонкий намек из документов, чтобы он заработал:
Учитывая тег prop (> = 0x80000000),
возвращает GUID и идентификатор названного
свойство.
Таким образом, тег свойства должен быть >= 0x80000000
, это означает, что он не будет работать для всех свойств, но только для пользовательских (я полагаю, в этом и заключается различие, поправьте меня, если я ошибаюсь.) теги, не удовлетворяющие этому условию, выдают сообщение об ошибке (0x8000ffff "неожиданные результаты").
Вот мой код. Это VBA, так что простите мне грубую ошибку Hex (), поскольку длинные целые числа VBA переполняются для таких больших чисел. Я уверен, что вы получите картину.
Sub GetNamesFromIds()
Dim rSession As New Redemption.RDOSession
Dim rMessage As Redemption.RDOMail
Dim PropertyList As Redemption.PropList
Dim PropTag As Long
Dim EntryId As String
Dim i As Integer
rSession.MAPIOBJECT = Application.Session.MAPIOBJECT
' retrieve first random mail for this example '
EntryId = ActiveExplorer.CurrentFolder.Items(1).EntryId
Set rMessage = rSession.GetMessageFromID(EntryId)
Set PropertyList = rMessage.GetPropList(0)
For i = 1 To PropertyList.Count
PropTag = PropertyList(i)
If "0x" & Right("00000000" & Hex(PropTag), 8) > "0x80000000" Then
Debug.Print
If IsArray(rMessage.Fields(PropTag)) Then
Debug.Print Hex(PropTag), "(Array:", UBound(rMessage.Fields(PropTag)), "items)"
Else
Debug.Print Hex(PropTag), "(", rMessage.Fields(PropTag), ")"
End If
Debug.Print " GUID:", rMessage.GetNamesFromIds(rMessage, PropTag).GUID
Debug.Print " ID:", rMessage.GetNamesFromIds(rMessage, PropTag).ID
End If
Next
End Sub
Первый фрагмент с выхода:
8041001E ( urn:content-classes:message )
GUID: {00020386-0000-0000-C000-000000000046}
ID: content-class