Esto generalmente es algo que tendrá que exponerse, así que sí, dependerá del idioma en que esté escrito su sistema (aunque a menudo también es posible escribir envoltorios para otros idiomas).
Si, por ejemplo, tiene un programa escrito en C, para Windows, los complementos se escribirán para su programa como archivos DLL. En tiempo de ejecución, cargará manualmente estas DLL y expondrá alguna interfaz a ellas. Por ejemplo, las DLL pueden exponer una función gimme_the_interface()
que podría aceptar una estructura llena de indicadores de función. Estos punteros de función permitirían que el DLL realice llamadas, registre retrollamadas, etc.
Si estuviera en C++, usaría el sistema DLL, excepto que probablemente pasaría un puntero de objeto en lugar de una estructura y el objeto implementar una interfaz que proporcionó funcionalidad (logrando lo mismo que la estructura, pero menos fea). Para Java, cargaría archivos de clase bajo demanda en lugar de archivos DLL, pero la idea básica sería la misma.
En todos los casos, deberá definir una interfaz estándar entre su código y los complementos, para que pueda inicializar los complementos, y para que los complementos puedan interactuar con usted.
P.S. Si desea ver un buen ejemplo de un sistema de complemento de C++, consulte el foobar2000 SDK. No lo he usado en bastante tiempo, pero solía estar muy bien hecho. Supongo que todavía lo es.
Sí, tenía miedo de que sería una respuesta como esta. Aún así, la ventaja es que significa que usted tiene el control total sobre lo que los complementos pueden hacer, supongo. – kaybenleroll