Das ganze ist einfacher als man denkt. Ein normales Exe-Programm hat wie eine
DLL eine
DPR als Einstiegspunkt. Somit brauchst du nur in der ersten zeile der Projektdatei "program" durch "library" ersetzen und schon ist es eine
DLL nach dem kompilieren.
Zu deinem Problem mit dem ShowModal: Pack das Laden der
DLL einfach in einen Thread und somit wird die
DLL und das anzeigen dieses Forms darin im Context des Threads ausgeführt. Bzw. muss das nicht dich interessieren sondern ist sache desjenigen der deine
DLL in sein C-Programm einbindet.
Wenn du es wie derzeit über deine Initialize-Funktion machen willst dann pack einfach den Inhalt der Funktion in einen Thread und starte in deiner Initialize-Funktion den Thread.