訂閱在C事件++/CX是這樣的:WRL:如何訂閱事件*不使用lambdas?
listener::ConnectionReceived +=
ref new TypedEventHandler<StreamSocketListener^, StreamSocketListenerConnectionReceivedEventArgs^>(this, &MyClass::OnConnectionReceived);
所有文件我已經找到了如何訂閱在WRL事件顯示的例子使用lambda表達式,像這樣:
auto connectionReceivedHandler = Callback<ITypedEventHandler<StreamSocketListener*, StreamSocketListenerConnectionReceivedEventArgs*>>
([&] (IStreamSocketListener* cbListener, IStreamSocketListenerConnectionReceivedEventArgs* args)
{
this->doSomething();
});
hr = listener->add_ConnectionReceived(connectionReceivedHandler.Get(), &this->connectionReceivedToken);
但是我如何訂閱WRL中的事件並提供類方法而不是lambda?事情是這樣的:
hr = listener->add_ConnectionReceived(&MyClass::OnConnectionReceived, &this->connectionReceivedToken);
當我嘗試訪問我的回調中的類成員時出現訪問衝突錯誤,但這是單獨發佈的另一個問題。這回答我的問題,謝謝! – Robert
@Robert訪問類成員的Segfault可能意味着'ptr_to_instance_of_MyClass'是懸而未決的。你有沒有和lambda一樣的問題?如果是這樣,請檢查MyClass實例的生命週期。 – syam