我想在本机c ++类中处理按钮单击事件。我尝试创建一个派生自Object
的'handler'对象来处理事件,然后调用c ++方法。例如,我尝试了以下代码:
ref class GButtonHandler sealed : public Object
{
public:
void Button_Click(Object^ sender, RoutedEventArgs^ e)
{
}
GTextBlockHandler(GButtonImpl * pButtonImpl, Button ^ button)
{
button->Click += ref new RoutedEventHandler(this, >extBlockHandler::Button_Click);
}
};
认为我可以松开pButtonImpl
指针,然后用它来调用Button_Clicked
函数中的本机函数。但是在编译此代码时,我收到错误:
error C3986: '{ctor}': signature of public member contains native type 'GButtonImpl'
所以它似乎不喜欢我将本机类传递给ref对象。有没有办法做到这一点?
请注意,我对开发Metro风格应用程序完全不熟悉,所以请耐心等待!
答案 0 :(得分:0)
好的,现在对我来说都很有意义。对于任何感兴趣的人,你不能拥有具有本机C ++参数的公共函数的WinRT对象的原因是这些对象不会被非C ++代码消耗。但是,(显而易见的?)解决方案是使构造函数为私有,并使用创建Object的类声明为“朋友”类(duh!)。然后一切都很好,编译器很高兴,我很高兴。
感谢所有花时间阅读此内容的人。
答案 1 :(得分:0)
正确的答案是使用internal
而不是public
作为构造函数。这告诉编译器它只能在当前项目中使用,并且不能用于外部项目(即用其他语言编写的库)。