Thema: Delphi COM-Object mit Events

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

Re: COM-Object mit Events

  Alt 9. Aug 2007, 17:50
Zitat von markus.waibel:
Also der Token hat einen Wert von 0. Was heißt das jetzt (Token 0)?
Das heisst, InterfaceConnect() ist in die Hosen gegangen.
Delphi-Quellcode:
procedure InterfaceConnect(const Source: IUnknown; const IID: TIID;
  const Sink: IUnknown; var Connection: Longint);
var
  CPC: IConnectionPointContainer;
  CP: IConnectionPoint;
begin
  Connection := 0;
  if Succeeded(Source.QueryInterface(IConnectionPointContainer, CPC)) then
    if Succeeded(CPC.FindConnectionPoint(IID, CP)) then
      CP.Advise(Sink, Connection);
end;
Ich vermute mal, der Parameter IID passt nicht.
Am Anfang der xxxx_TLB.pas steht ja ungefähr das:DIID_IabcedfgEvents: TGUID = '{C70599C4-5BE7-11D5-8F48-0000E237BE23}'; // nur ein Beispiel Das wäre IMHO die richtige GUID.

Führt das nicht zum Ziel, dann die Procedure InterfaceConnect in deine Unit kopieren und zum Debuggen so ändern:
Delphi-Quellcode:
procedure InterfaceConnect(const Source: IUnknown; const IID: TIID;
  const Sink: IUnknown; var Connection: Longint);
var
  CPC: IConnectionPointContainer;
  CP: IConnectionPoint;
  res : HResult;
begin
  Connection := 0;
  res := Source.QueryInterface(IConnectionPointContainer, CPC);
  OleCheck(res);
  res := CPC.FindConnectionPoint(IID, CP);
  OleCheck(res);
  res := CP.Advise(Sink, Connection);
  OleCheck(res);
  // eine der 3 Methoden müsste bei OleCheck auf einen Fehler laufen
end;
Zitat:
Zwischendurch mal ein GROSSES DANKESCHÖN für Deine Mühen.
Das hört man gern.
Andreas
  Mit Zitat antworten Zitat