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

正解は、コンストラクターinternalではなくを使用することです。publicこれは、現在のプロジェクトでのみ使用可能であり、外部プロジェクト(つまり、別の言語で作成されたライブラリ)では使用できないことをコンパイラに通知します。

于 2013-01-11T16:12:29.467 に答える
0

わかりました、それは今私にとって理にかなっています。興味のある他の人にとっては、ネイティブ C++ 引数を持つパブリック関数を持つ WinRT オブジェクトを使用できない理由は、これらのオブジェクトが C++ 以外のコードで使用できないためです。ただし、(明らかな?) 解決策は、コンストラクターをプライベートにし、オブジェクトを作成するクラスを「フレンド」クラスとして宣言することです (当たり前!)。その後、すべてが順調で、コンパイラーは満足しており、私も満足しています。

これを読むために時間を割いてくれたすべての人に感謝します。

于 2012-07-01T21:42:57.420 に答える