我的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他们进行投射)。