0

C# UI、C++/CLI 混合モード相互運用ラッパー、およびいくつかのネイティブ C++ プロジェクトで構成されるシステムがあります。

私がしなければならないことは、ネイティブの C++ コードがログ メッセージを送信でき、UI がそれを報告できるようにシステムをセットアップすることです。

これをテンプレートとして使用してネイティブ IObservable をセットアップしましたが、C# コードはオブザーバーになれません。私が考えたのは、C++/CLI で別のオブザーバー パターンをセットアップして、ネイティブ オブザーバーを監視し、C# でそれを実装できるようにすることでした。これをテンプレートとして使用しましたが、これを有効な C++/CLI に変換するのに苦労しています。

ref class Observable
{
public:
Observable(void);
virtual ~Observable(void);

event System::EventHandler^ SomethingHappened;

void DoSomething() {
    System::EventHandler^ handler = SomethingHappened;
    //if (handler != nullptr)
    //{
        handler(this, System::EventArgs::Empty);
    //}//null check not permitted in C++/CLI
};

次のエラーが表示されます: C3918: SomethingHappened をデータ メンバーにする必要があります。 これは MSDN ページですが、何が間違っているのかわかりません。

助言がありますか?

ありがとう、メラニー

4

3 に答える 3

0

これを使用して、正しいことは、イベントを直接発生させることです。このような:

void DoSomething() {       
    SomethingHappened(this, System::EventArgs::Empty);
}
于 2013-04-04T00:14:49.873 に答える
0

C++/Cli では、"自明なイベント" を使用する場合、イベントの null をチェックする必要はありません (できません)。言語がそれを処理します。

関連項目: エラー C3918: nullptr であることを確認するイベントでエラーが発生しました C++/CLI イベントにはリスナーがありますか?

したがって、あなたの場合は、チェックを外してnullptrください

于 2013-04-03T17:07:07.570 に答える