我的WinRT组件中包含以下内容:

public value struct WinRTStruct
{
    int x;
    int y;
};

public ref class WinRTComponent sealed
{
    public:
    WinRTComponent();
    int TestPointerParam(WinRTStruct * wintRTStruct);
};

int WinRTComponent::TestPointerParam(WinRTStruct * wintRTStruct)
{
    wintRTStruct->y = wintRTStruct->y + 100;
    return wintRTStruct->x;
}


但是,当从C#中调用时,似乎winRTStruct-> y和x的值在方法内部始终为0:

WinRTComponent comp = new WinRTComponent();
WinRTStruct winRTStruct;
winRTStruct.x = 100;
winRTStruct.y = 200;
comp.TestPointerParam(out winRTStruct);
textBlock8.Text = winRTStruct.y.ToString();


通过引用传递结构以便在用C ++ / CX编写的WinRTComponent方法中进行更新的正确方法是什么?

最佳答案

您不能通过引用传递结构。 winrt中的所有值类型(包括结构)都按值传递。预期Winrt结构相对较小-它们打算用于容纳Point和Rect之类的东西。

在您的情况下,您已指出该结构是“ out”参数-“ out”参数是只写的,其内容在输入时被忽略,并在返回时被复制出。如果要让结构进入和退出,请将其分为两个参数-一个“输入”参数和另一个“输出”参数(在WinRT中不允许输入/输出参数,因为它们不会以您期望的方式投影到JS他们进行投射)。

10-08 05:11