Registrierungsfreies COM-ähnliches Interop und Threading

Ich arbeite an einer Desktop-App mit einer WPF-Benutzeroberfläche und einem nicht verwalteten C ++ - Backend. Ich habe die API folgendermaßen definiert (C # -Version, abgeschnitten):

[Guid( "###" ), InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
interface iMyApp
{
    void aMethod();
}
[DllImport( "my.dll", PreserveSig = true )]
public extern static int create( string configPath, out iMyApp a );

Im Backend habe ich

__interface __declspec( uuid( "###" ) ) iMyApp: public IUnknown
{
    HRESULT __stdcall aMethod();
}

Und klassische ATL-basierte Implementierung.

Dies funktioniert gut und schnell, erfordert keine COM-Registrierung, keine Typbibliotheken, keinen MIDL-Compiler usw.

Das Problem ist, dass ich iMyApp-Instanzen nicht über Threads in C # übergeben kann. Die Ausnahme E_NOINTERFACE wird ausgelöst.

Meine Implementierung ist threadneutral.

Wie kann ich das .NET mitteilen, damit es nicht mehr die Schnittstellen über Threads hinweg marshallt und nur denselben IUnknown-Zeiger für alle Threads verwendet? Wenn es darauf ankommt, muss ich nur 4.5 + @ unterstütz

Antworten auf die Frage(2)

Ihre Antwort auf die Frage