Чтобы позволить bar.dll использовать классы из foo.exe, вам нужно передать экземпляр класса с виртуальными функциями из foo.exe в bar.dll.Bar.dll будет вызывать виртуальные функции, полученные из foo.exe.
Да, для bar.dll возможно передать производные предложения обратно в foo.exe, а затем вызвать foo.exeвиртуальные функции указанных классов.
Это решение будет кросс-платформенным, но у вас будут серьезные проблемы с тем, чтобы не нарушать abi между разделяемой библиотекой и exe.Даже самые простые изменения могут легко сломать аби.
Это хорошее введение в то, что может сломать аби.