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.