DataExchange on linux?

I’m trying to use the DataExchange as per tutorial which seems to be the efficient way of transfering audio data to the controller thread for using in FFT displays etc.
On windows, I was able to use it just fine.
Currently, on linux it appears the Processor does not want to connect to the controller.
I get no “queue opened” or block transfer messages.
A little GDB later, I found out everything is well until
void DataExchangeHandler::onConnect (IConnectionPoint* other, FUnknown* hostContext)
tries to do
impl->exchangeHandler = U::cast<IDataExchangeHandler> (hostContext);
which returns zero, hence no connection is established.

What did I miss?

In case of missing host-side DataExchange API support, overriding the notify function as per tutorial, the alternate IMessage route should work automatically without further intervention, calling the onDataExchangeBlocksReceived method, no?

There was a missing peace in linux support, namely the support for the generic IRunLoop interface. In the first iteration the IRunLoop interface was only available when opening the editor. This was changed in one of the latest releases. Maybe your host does not support the newer IRunLoop specification.

Thanks for the response @Arne_Scheffler!

So to connect the DataExchange, the new iRunLoop is needed host-side and even iMessage wouldn’t work?

In the case I’m describing, the editor is open (directly after loading the plugin). Neither is a connection established nor any data received.

I already requested the REAPER devs to implement the iRunLoop fix for a crash when closing a controller that uses an animation but that was a month ago.

Yes, the run loop is needed to support message handling. You would not need the runloop interface when the host would support the data exchange API natively.