1

我想处理原生 c++ 类中的按钮单击事件。我尝试创建一个派生自Object处理事件的“处理程序”对象,然后调用 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, &GTextBlockHandler::Button_Click);
     }
 };

认为我可以将pButtonImpl指针隐藏起来,然后用它来调用函数中的本机Button_Clicked函数。但是在编译这段代码时,我得到了错误:

error C3986: '{ctor}': signature of public member contains native type 'GButtonImpl'

因此,它似乎不喜欢我将本机类传递给 ref 对象。有没有办法做到这一点?

请注意,我对开发 Metro 风格应用程序完全陌生,所以请耐心等待!

4

2 回答 2

0

好的,现在对我来说一切都有意义。对于其他感兴趣的人,您不能使用具有本机 C++ 参数的公共函数的 WinRT 对象的原因是这些对象将不能被非 C++ 代码使用。但是,(显而易见的?)解决方案是使构造函数私有,并将创建 Object 的类声明为“朋友”类(duh!)。那么一切都很好,编译器很高兴,我也很高兴。

感谢所有花时间阅读本文的人。

于 2012-07-01T21:42:57.420 回答
0

正确的答案是使用internal而不是public构造函数。这告诉编译器它只在当前项目中可用,而对外部项目(即用另一种语言编写的库)不可用。

于 2013-01-11T16:12:29.467 回答