0

我在托管 c++ 中实现了一个简单的类(编译成 dll),它在内部使用 IAccessible,如下所示。

public ref class MsaaElement {
public:
    System::Drawing::Rectangle MsaaElement::Location() {
        long left = 0, top = 0, width = 0, height = 0;
        VARIANT v;
        v.vt = VT_I4;
        v.intVal = childId;
        // if not S_OK, return 0, 0, 0, 0
        iAccessible->accLocation(&left, &top, &width, &height, v);
        return System::Drawing::Rectangle(left, top, width, height);
    }
    MsaaElement^ MsaaElement::CreateAccessible(IAccessible* accessible) {
        return gcnew MsaaElement(accessible, CHILDID_SELF);
    }
    MsaaElement^ MsaaElement::CreateSimple(IAccessible* accessible, int childId) {
        return gcnew MsaaElement(accessible, childId);
    }
private:
    MsaaElement(IAccessible* accessible, int id)
        : iAccessible(accessible), childId(id) {}

    IAccessible* iAccessible;
    int childId;
};

我在 C# 中创建了一个 MsaaElement,并尝试获取元素的位置。一切正常。我可以多次获得该位置而没有任何问题。

但是,当我将 C# 中的 MsaaElement 传递给另一个线程并尝试在另一个线程中获取元素的位置时,返回的位置始终是 (0,0,0,0)。

为什么 iAccessible 接口在另一个线程中失败?

谢谢。

4

0 回答 0