AccessibleChildren возвращает ноль

Я конвертирую некоторый код VBA, который использует AccessibleChildren метод к C#, но у меня есть некоторые проблемы. Объявление выглядит так:

[DllImport("oleacc.dll")]
    private static extern uint AccessibleChildren(IAccessible paccContainer, int iChildStart, int cChildren, [Out] object[] rgvarChildren, out int pcObtained);

Код, который я запускаю, выглядит следующим образом:

private static object[] GetChildren(IAccessible element)
{
    const int firstchild = 2;
    int numChildren;
    int numReturned;

    numChildren = element.accChildCount;
    object[] childrenArray = null;

    if (numChildren > 0)
    {
        childrenArray = new object[numChildren];
        AccessibleChildren(element, firstchild, numChildren, childrenArray, out numReturned);
    }

    return childrenArray;
}

Проблема в том, что когда я вызываю этот метод на допустимой IAccessible (например, на ленте в Word) childrenArray[0] равно null, У кого-нибудь есть идеи? Одна мысль, которая у меня была (или, по крайней мере, что-то, что не имеет смысла для меня), заключается в том, что код VBA проходит первый элемент массива:

Private Function GetChildren _
                 (Element As IAccessible) _
             As Variant()
    Const FirstChild        As Long = 0&
    Dim NumChildren         As Long
    Dim NumReturned         As Long
    Dim ChildrenArray()

    NumChildren = Element.accChildCount

    If NumChildren > 0 Then
    AccessibleChildren Element, FirstChild, NumChildren, _
                           ChildrenArray(0), NumReturned
    End If
    GetChildren = ChildrenArray
End Function

Спасибо!

1 ответ

Решение

По-видимому 0& это способ представления 32-битной long числа 0. Я не уверен, почему я думал, что это было 2 но переключая его на 0 казалось, это исправить!

Другие вопросы по тегам