Hallo,
folgendes Problem liegt vor:
Ich habe zwei ActiveForms; Die 1.ActiveForm(Server) löst einen Event aus, wenn sich die
ContainerFenstergröße ändert....das funktioniert! Weiterhin registriert sich der Server im ROT.
Die 2.ActiveForm(Client) beinhaltet mit Hilfe des eventsinkimp 2.0-Tools die Eventschnittstellenkomponente
des Servers. Der Client bekommt einen Zeiger auf den laufenden Server...funktioniert! Nun soll der
EventSink der Eventschnittstellenkomponente mit der ServerEventSchnittstelle verbunden werden....beim
Befehl "Advise" wird eine Exception ausgelöst !!
Folgenden Programmcode habe ich eingegeben:
unit ActiveFormControlSizeV3Impl1;
procedure TActiveFormControlSizeV3X.Button2Click(Sender: TObject);
begin
RegisterActiveObject(Self as IUnknown,
ActiveFormControlSizeV3Proj1_TLB.CLASS_ActiveFormC ontrolSizeV3X,
ACTIVEOBJECT_WEAK,FServerROTHandle);
end;
unit ActiveFormClientContainerSizeImpl1;
procedure TActiveFormClientContainerSizeX.Button1Click(Sende r: TObject);
begin
try
ISrvObj:=GetActiveOleObject(ClassIDToProgID
(CLASS_ActiveFormControlSizeV3X));
Listbox1.Items.Add('GetActiveOleObject OK !');
except
Listbox1.Items.Add('GetActiveObject except !');
end;
try
If Assigned(ISrvObj) then begin
Listbox1.Items.Add('Assigned ISrvObj OK !');
ActiveFormControlSizeV3Proj1IActiveFormControlSize V3XEvents1.Connect
(IUnknown(ISrvObj));
Listbox1.Items.Add('Connect OK !');
end;
except
Listbox1.Items.Add('Connect except !');
end;
end;
unit ActiveFormControlSizeV3Proj1Events;
procedure TActiveFormControlSizeV3Proj1EventsBaseSink.Connec t (const
ASource: IUnknown);
var
pcpc: IConnectionPointContainer;
begin
Assert (ASource <> nil);
Disconnect;
try
OleCheck (ASource.QueryInterface (IConnectionPointContainer, pcpc));
ShowMessage('QueryInterface');
OleCheck (pcpc.FindConnectionPoint (FSinkIID, FCP));
ShowMessage('FindConnectionPoint ');
OleCheck (FCP.Advise (Self, FCookie)); //Fehler !!
ShowMessage('FCP.Advise');
FSource := ASource;
except
raise Exception.Create (Format ('Unable to connect %s.'#13'%s',
[Name, Exception (ExceptObject).Message]
));
end; { finally }
end;
Kann mir jemand sagen, was ich falsch mache, oder hat mir jemand einen Tip, wie ich es besser machen könnte
?!?
(Ich verwende außerdem Windows2000 und Delphi5Prof)
Vielen Dank.
Ralph Dürsen.
folgendes Problem liegt vor:
Ich habe zwei ActiveForms; Die 1.ActiveForm(Server) löst einen Event aus, wenn sich die
ContainerFenstergröße ändert....das funktioniert! Weiterhin registriert sich der Server im ROT.
Die 2.ActiveForm(Client) beinhaltet mit Hilfe des eventsinkimp 2.0-Tools die Eventschnittstellenkomponente
des Servers. Der Client bekommt einen Zeiger auf den laufenden Server...funktioniert! Nun soll der
EventSink der Eventschnittstellenkomponente mit der ServerEventSchnittstelle verbunden werden....beim
Befehl "Advise" wird eine Exception ausgelöst !!
Folgenden Programmcode habe ich eingegeben:
unit ActiveFormControlSizeV3Impl1;
procedure TActiveFormControlSizeV3X.Button2Click(Sender: TObject);
begin
RegisterActiveObject(Self as IUnknown,
ActiveFormControlSizeV3Proj1_TLB.CLASS_ActiveFormC ontrolSizeV3X,
ACTIVEOBJECT_WEAK,FServerROTHandle);
end;
unit ActiveFormClientContainerSizeImpl1;
procedure TActiveFormClientContainerSizeX.Button1Click(Sende r: TObject);
begin
try
ISrvObj:=GetActiveOleObject(ClassIDToProgID
(CLASS_ActiveFormControlSizeV3X));
Listbox1.Items.Add('GetActiveOleObject OK !');
except
Listbox1.Items.Add('GetActiveObject except !');
end;
try
If Assigned(ISrvObj) then begin
Listbox1.Items.Add('Assigned ISrvObj OK !');
ActiveFormControlSizeV3Proj1IActiveFormControlSize V3XEvents1.Connect
(IUnknown(ISrvObj));
Listbox1.Items.Add('Connect OK !');
end;
except
Listbox1.Items.Add('Connect except !');
end;
end;
unit ActiveFormControlSizeV3Proj1Events;
procedure TActiveFormControlSizeV3Proj1EventsBaseSink.Connec t (const
ASource: IUnknown);
var
pcpc: IConnectionPointContainer;
begin
Assert (ASource <> nil);
Disconnect;
try
OleCheck (ASource.QueryInterface (IConnectionPointContainer, pcpc));
ShowMessage('QueryInterface');
OleCheck (pcpc.FindConnectionPoint (FSinkIID, FCP));
ShowMessage('FindConnectionPoint ');
OleCheck (FCP.Advise (Self, FCookie)); //Fehler !!
ShowMessage('FCP.Advise');
FSource := ASource;
except
raise Exception.Create (Format ('Unable to connect %s.'#13'%s',
[Name, Exception (ExceptObject).Message]
));
end; { finally }
end;
Kann mir jemand sagen, was ich falsch mache, oder hat mir jemand einen Tip, wie ich es besser machen könnte
?!?
(Ich verwende außerdem Windows2000 und Delphi5Prof)
Vielen Dank.
Ralph Dürsen.