А если у вас нет источников в dll, то вы должны загрузить его в разные процессы, по одному "singleton" на процесс.Это могут быть простые дочерние процессы вашего основного процесса, которые просто обрабатывают коммуникационную часть dll.
Тогда, конечно, вы должны прийти с некоторой схемой связи между вашим основным процессом и вашими дочерними процессами, которая будет зависеть от того, сколько вы используете DLL.Это просто пара звонков с большим количеством данных?Или много разных вызовов, которые отличаются от запуска к запуску?
Как правило, если вы используете dll для выполнения более пары простых вызовов, вероятно, проще реорганизовать собственный код.