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