Kannst du TLB mal hochladen und dazu angeben, um welches Event-Interface es sich handelt ?
Man kann die TLB wie folgt extrahieren:
Im Delphi Menue: Datei -> Öffnen
Dateityp auf "Typbibliothek" umstellen.
EXE,
DLL oder OCX-Datei laden. (kann sehr laaaange dauern)
Datei -> Speichern unter (Dateiendung auf .TLB ändern)
Als Hintergrund:
um ein
COM-Event zu empfangen, benötigt man entweder
a.) ein passendes IDispatch-Interface oder
b.) ein Interface, dass von der Server-TLB vorgegeben wird. (frühe Bindung)
Delphi kann nur mit dem Fall a.) umgehen; mit Fall b.) kommt Delphi (aber auch VB-Script, Java-Script) nicht klar.
Beim Fall a.) gibt es noch zwei Varianten:
1.) entweder der Server ruft zuerst die function GetIDsOfNames auf, und danach Invoke
2.) der Server ruft direkt Invoke auf weil ihm die DispIds schon von der TLB bekannst sind.
Wenn der Server nach Fall 1.) agiert (ist aber eher selten), dann hat Delphi ein Problem:
Delphi-Quellcode:
function TEventDispatch.GetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
Result := E_NOTIMPL; // nicht implementiert, blöd
end;