Sto cercando di progettare una libreria gestita per implementare -quelli che sembrano essere- i plugin VST3 non gestiti. L'interfaccia del plugin VST3 è un'API basata su interfacce C / C ++ compatibile con COM (conteggio ref, HRESULT ecc.) - ma non COM (nessun reg, CLSID ecc.). Il punto di ingresso nel plugin è una funzione esportata (su Windows) che recupera una factory di classe (molto simile a COM). Da lì la sua comunicazione basata su interfaccia COM-compatibile.
Voglio implementare una soluzione Mono che funzioni su Windows, Mac e, se possibile, su Linux. Ho trovato una descrizione di come incorporare il Mono CLR nell'assieme assieme al codice C e al codice IL gestito. link Questo sembra un modo per ottenere da C al mondo gestito con mono - anche se sembra una soluzione pesante.
Quindi voglio utilizzare COM Interop (CCW / RCW) per eseguire il marshalling automatico delle interfacce VST3. Ho fatto una traccia di Windows / MS che ha funzionato (i problemi sono oltre questa discussione e non sono portatili), quindi se potessi riutilizzare quel codice, sarebbe fantastico. Ecco un esempio del factory degli oggetti: link
Ci sono un paio di domande che ho per questo disegno a cui vorrei avere risposta prima di continuare con lo sforzo.
- Questo disegno (incorpora CLR e COM Interop) funzionerebbe?
La parte di incorporamento di cui sono abbastanza fiducioso, ma che ne dici di COM-Interop su Mac / Linux? - Come funzionano le esportazioni di funzioni su Mac e Linux?
L'applicazione host deve essere in grado di chiamare nel plug-in usando questa funzione C esportata. - Dovrei scrivere un codice specifico per ogni piattaforma?
Mi piacerebbe avere solo una base di codice con casi speciali minimi.