Aplicación de C ++ multiproceso utilizando Matlab Engine

Abro el motor de Matlab en un hilo de inicialización, haciendo:

bool MY_MATLAB_ENGINE_o::Open()
{
    // Handle the case where engine is already open
    if( MatlabEngine )
    {
        return true;
    }
    else if( !( MatlabEngine = engOpen( 0 ) ) )
    {
        return false;
    }

    IsEngineOpen.SetValue( true );
    return true;
}

FunciónengOpen() abre un canal COM a Matlab. Una vez que el motor está abierto, el hilo cae en el modo de evento de espera.

Luego, en otro hilo, hago esto:

bool MY_MATLAB_ENGINE_o::ChangeDirectory( QString strPath )
{
    QString strPathToScript = "cd('" + strPath + "');";

    QByteArray ba = strPathToScript.toLatin1();
    const char* cPathToScript = ba.data(); 

    if( MatlabEngine )
    {
        engEvalString( MatlabEngine, cPathToScript );

        return true;
    }

    return false;
}

Yo tengo unCoInitialize has not been called Excepción de primera oportunidad enengEvalString( MatlabEngine, cPathToScript ); lo que parece indicarme que el servidor COM de Matlab no está disponible (pero el motor de Matlab aún está en funcionamiento).

Sin embargo, cuando coloco todo en el mismo hilo, funciona bien, pero ese no es el tipo de diseño que tenía en mente.

Me parece que la documentación del motor Matlab carece de información sobre engine + COM. ¿Alguna idea de cómo tener la inicialización del motor y las llamadas de función en hilos separados?

Gracias !

EDITAR tras la respuesta de RobH

Agregué este método a mi clase (ejemplificado en el segundo hilo):

bool MY_MATLAB_FUNCTION_CALL_o::PostThreadCreationHook()
{
    HRESULT hr;
    hr = CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hr)) 
    { 
        return false;
    }

    return true;
}

Y ahora cuando llamoengEvalString( MatlabEngine, cPathToScript ); yo obtengoThe application called an interface that was marshalled for a different thread Excepción de primera oportunidad :) Me divierto mucho esta mañana! :)

Asi que,CoMarshalInterface() ?

Respuestas a la pregunta(1)

Su respuesta a la pregunta