Du brauchst 2
COM-Server für das was du da machen willst...
Der Server, der mit der Datenbank kommuniziert wird mit den Parametern ciInternal und tmApartment initialisiert.
Der Server, der mit der Anwendung kommuniziert wird mit ciMultiInstance und tmApartment initialisiert. Zudem hat dieser Server, ich nenne ihn einmal Manager, eine Property vom Typ des Interfaces vom
DB-
COM-Server. Beim Zugriff auf die Property wird geprüft, ob der Server schon läuft, ansonsten wird er gestartet:
Delphi-Quellcode:
function TCallbackManager.Get_CallbackServer : ICallbackServer;
begin
if (CallbackServer = nil) then
CallbackServer := TCallbackServer.Create;
Result := CallbackServer;
end;
Damit läuft der Server für die
DB innerhalb des Out-Of-Process Servers genau einmal.
Das muss so sein, da jede Anwendung, egal ob späte oder frühe Bindung, ihr eigenes
COM-Objekt braucht, so meine Erfahrungen.