/Moin,
kaum habe ich das eine PRoblem gelöst, kommt das nächste...
Habe mir anhand des Beispiel Kapitel 8 - DBSrv aus dem Buch COM/DCOM/COM+ einen CallbackServer geschrieben.
Der funktioniert auch soweit, aber die Callbacks sind sehr sehr langsam. Ich auf den Callback für einen Client 15-20 Sekunden.
Da mir jedoch bei dem Aufruf folgender Funktion:
Immer der Fehler unterkam, dass das Interface für eine andere Anwendung marshalled sei, habe ich diese wie folgt geändert:
Ich denke jedoch, dass ich da durch diese extremen Performance Probleme erhalte, jedoch nicht weiss, wie ich das lösen kann.
Vielleicht kennt einer dieses Problem ja.
Greetz Dennis
kaum habe ich das eine PRoblem gelöst, kommt das nächste...
Habe mir anhand des Beispiel Kapitel 8 - DBSrv aus dem Buch COM/DCOM/COM+ einen CallbackServer geschrieben.
Der funktioniert auch soweit, aber die Callbacks sind sehr sehr langsam. Ich auf den Callback für einen Client 15-20 Sekunden.
Da mir jedoch bei dem Aufruf folgender Funktion:
Code:
function TDBUsers.AddUser(const CB: IDBEvent; var User: Integer): Boolean; var aUser : TDBUser; begin Inc(FLastUserId); // numerische Benutzerkennung zurückliefern User := FLastUserId; // Benutzerobjekt anlegen aUser := TDBUser.Create; with aUser do begin UserId := FLastUserId; Callback := CB; end; // Benutzerobjekt in die Benutzerliste aufnehmen FUserList.Add(aUser); Result:= TRUE; end;
Code:
function TPrograms.AddProg(const ACallbackList : ICallbackEvent; var AProgname : Widestring) : Boolean; var aProg : TProgram; aCB : ICallbackEvent; begin if FindProg(AProgname) = -1 then begin // Programmobjekt anlegen aProg := TProgram.Create; OleCheck(CoMarshalInterThreadInterfaceInStream(IID_ICallbackEvent, ACallbackList, IStream(aProg.CP))); OleCheck(CoGetInterfaceAndReleaseStream(IStream(AProg.CP), IID_ICallbackEvent, aProg.Callback)); aProg.ProgName := AProgname; FProgList.Add(aProg); Result := True; end else Result := False; end;
Vielleicht kennt einer dieses Problem ja.
Greetz Dennis