イベントを発生させるWindowsランタイムコンポーネント(C#で記述)にクラスがあります。
コンポーネントを参照するC++/CXアプリでこれらのイベントをサブスクライブする方法を理解できません。
C#コード(Windowsランタイムコンポーネント内):
public sealed class Messenger {
private EventRegistrationTokenTable<EventHandler<MessageReceivedEventArgs>> messageReceivedTokenTable;
public event EventHandler<MessageReceivedEventArgs> MessageReceived
{
add
{
return EventRegistrationTokenTable<EventHandler<MessageReceivedEventArgs>>
.GetOrCreateEventRegistrationTokenTable(ref this.messageReceivedTokenTable)
.AddEventHandler(value);
}
remove
{
EventRegistrationTokenTable<EventHandler<MessageReceivedEventArgs>>
.GetOrCreateEventRegistrationTokenTable(ref this.messageReceivedTokenTable)
.RemoveEventHandler(value);
}
}
internal void OnMessageReceived(string message, string location)
{
EventHandler<MessageReceivedEventArgs> temp =
EventRegistrationTokenTable<EventHandler<MessageReceivedEventArgs>>
.GetOrCreateEventRegistrationTokenTable(ref this.messageReceivedTokenTable)
.InvocationList;
temp(this, new MessageReceivedEventArgs(message, location));
}
}
MessageReceivedEventArgs
は:
public sealed class MessageReceivedEventArgs : object
{
public MessageReceivedEventArgs(string message, string location)
{
this.Message = message;
this.SenderLocation = location;
}
public string Message { get; set; }
public string SenderLocation { get; set; }
}
MSDNによると、これはEventArgsではなくオブジェクトから派生していることに注意してください。
次にC++で:
msngr = ref new Messenger();
msngr->MessageReceived += ?????????
+=
C ++アプリでメッセージを受信できるようにするには、関連するメソッド(およびその他の場所-C#および/またはC ++)の後に何を実行する必要がありますか?
私はさまざまなことを試しましたが、遭遇したさまざまなコンパイラの警告では、解決策を示すことができませんでした。
C#で記述されているがC ++アプリで使用されているWindowsランタイムコンポーネントの使用例はすべて些細なものであり、プロパティの使用とメソッドの呼び出しのみを示しています。どちらも問題なくできます。私は、C#で発生するC++のイベントをサブスクライブする例を示しています。