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
казалось, это исправить!