![]() |
Problem mit COM Event Automation - EventSinkImp
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
habe mich mehrere Tage durchs Netz gekämpft um einer COM-Library die Events zu entlocken - kein Erfolg ... Es handelt sich um eine API von Cortal Consors um Banking-Aufgaben zu erledigen. Mittels EventSinkImp habe ich einen Event-Wrapper erzeugt aber die Ereignisse werden nicht durchgestellt. Auf herkömmlichem Wege mittels der dispinterfaces oder dualen Schnittstellen komme ich auch nicht weiter. Mit C# ist es in 5 Zeilen erledigt, aber ich wollte gerne nur eine Anwendung und nicht alles aufteilen. Vielleicht sieht einer von Euch besser durch und hat einen Tipp ? Vielen Dank |
Re: Problem mit COM Event EventSinkImp
Liste der Anhänge anzeigen (Anzahl: 1)
hmm ..also ich habe schon öfters festgestellt das D2006 eine TLB besser importiert .. ich habe das mal für dich erledigt.
Teste es mal damit, wenn du etwas code zeigst könnten evtl andere noch helfen. :wink: |
Re: Problem mit COM Event EventSinkImp
Vielen Dank, aber daran liegt es nicht. Habe D2005 verwendet.
Hier mal ein Beispiel meiner Versuche mit dem Ereignis SessionLogout aus der TLB:
Delphi-Quellcode:
1. Versuch : Verwendung der von EventSinkImp generierten Event-Wrapper
_CallbackSessionLogout = interface;
_CallbackSessionLogoutDisp = dispinterface; ISessionLogoutSubscriptionCallbackEvents = dispinterface _CallbackSessionLogout = interface(IDispatch) ['{C5F3FBC2-5ACE-37C2-A400-B146B40B9656}'] end; _CallbackSessionLogoutDisp = dispinterface ['{C5F3FBC2-5ACE-37C2-A400-B146B40B9656}'] end; ISessionLogoutSubscriptionCallbackEvents = dispinterface ['{D99CA617-21FD-345D-9936-C23238B7AB4F}'] procedure OnLogout; dispid 1610743808; !!! diese Zeile fehlt in der unit vom PASTLWTR : 1.2 ??? end; _SessionLogoutSubscription = interface(IDispatch) ['{8B4C37BD-43ED-3215-8259-968FD8102B81}'] function Get_ToString: WideString; safecall; function Equals(obj: OleVariant): WordBool; safecall; function GetHashCode: Integer; safecall; function GetType: _Type; safecall; procedure add_OnLogout(const value: _CallbackSessionLogout); safecall; procedure remove_OnLogout(const value: _CallbackSessionLogout); safecall; property ToString: WideString read Get_ToString; end; _SessionLogoutSubscriptionDisp = dispinterface ['{8B4C37BD-43ED-3215-8259-968FD8102B81}'] property ToString: WideString readonly dispid 0; function Equals(obj: OleVariant): WordBool; dispid 1610743809; function GetHashCode: Integer; dispid 1610743810; function GetType: _Type; dispid 1610743811; procedure add_OnLogout(const value: _CallbackSessionLogout); dispid 1610743812; procedure remove_OnLogout(const value: _CallbackSessionLogout); dispid 1610743813; end; CoCallbackSessionLogout = class class function Create: _CallbackSessionLogout; class function CreateRemote(const MachineName: string): _CallbackSessionLogout; end; Er erzeugt eine Klasse TCC_APIISessionLogoutSubscriptionCallbackEvents, die habe ich so bemüht wie es in der Hilfe gesagt wird -> Interface wird connected aber wenn es zum Ereignis kommen soll keine Reaktion.
Delphi-Quellcode:
te:=session.GetSessionLogoutSubscription;
test:=TCC_APIISessionLogoutSubscriptionCallbackEvents.Create(self); test.OnLogout:=oncclogout; test.Connect(te); 2. Versuch : direkte Programmierung wie bei ![]() Geht teilweise aber wenn es interessant wird können Klassen nicht gecastet werden oder Objekt nicht registriert und so Sachen Ich vermute ja dass ich irgendwie die Methode add_OnLogout(const value: _CallbackSessionLogout); verwenden muss aber das endet mit besagten Fehlern So, wenn jemand durch das Thema ist sollte er mit diesen Informationen zurechtkommen - lt. den Angaben diverser Delphi COM Seiten ?! |
Re: Problem mit COM Event Automation - EventSinkImp
Kannst du mir mal noch die Deklaration von oncclogout zeigen ?
Evtl. liegt der fehler ja beim Callback. |
Re: Problem mit COM Event Automation - EventSinkImp
Hier ist sie...
Delphi-Quellcode:
Nur es kommt nicht mal zum Aufruf der Methoden des Event Wrappers, geschweige denn meines eigentlichen Handlers (Quellcodestück) - d.h. irgendetwas fehlt noch zwischen dem COM-Server und meinen Versuchen.
procedure TfOTC.OnCCLogout(Sender: TObject);
begin windows.beep(100,500); application.title:='EXIT'; end; |
Re: Problem mit COM Event Automation - EventSinkImp
Hi,
ich habe mir mal die Trading API geladen und installiert ... teste mal nen bisschen. Gebe dir bescheid wenn ich weiter komme. |
Re: Problem mit COM Event Automation - EventSinkImp
Hi,
also ich bekomme noch nicht einmal einen Login hin. Funktioniert das bei dir ? |
Re: Problem mit COM Event Automation - EventSinkImp
Einfaches Testprogramm
Session erstellen (automatisch in Demo-Konto einloggen) :
Delphi-Quellcode:
dann kann man alles was das session-Objekt hergibt machen ... z.B.
var session :SessionFacade;
login :LoginSettings; coinitialize(nil); session:=CoSessionFacade.Create; login:=session.GetLoginSettings(0); login.setLoginData('555555555','12345',''); session.AutoLoginWithAddOnName('Test',false,login);
Delphi-Quellcode:
dann z.B. das Event für Logout-Erkennung einrichten
if session.isLoggedIn ...
Delphi-Quellcode:
oder für eine Push-Quote (Wertpapierkurs/Umsatz)
var ev : SessionLogoutSubscription;
ev:=session.GetSessionLogoutSubscription;
Delphi-Quellcode:
und diese Ereignisse dann zu empfangen ist mein Problem (ev oder qs bieten dann diese Add_OnXXX / Remove_OnXXX Methoden die wohl der Schlüssel dazu sind) ?!
var qk :quoteKey;
qs :quoteSubscription; qk:=session.CreateQuoteKey; qk.Set_SecurityCode('710000'); qk.Set_StockexchangeId('ETR'); qs:=session.GetQuoteSubscription(qk); Im Tray ist das API-Symbol da kann man über das Kontextmenü den Status verfolgen und z.B. sehen wie Quotenereignisse ankommen |
Re: Problem mit COM Event Automation - EventSinkImp
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich kann das nicht nachvollziehen ... sobald ich einen Loginversuch mache friert mein Testprogramm ein und das wars.
Habe es auch mit deiner API übersetzung probiert kein Erfolg. Es könnte jetzt nur noch an der mscorlib_tlb.pas hängen. Ich hänge dir mal mein Testprojekt an ... evtl kannst dus ja mal bei dir Testen ... bei mir bekomme ich den Login nicht hin. greez ACE |
Re: Problem mit COM Event Automation - EventSinkImp
Hm, das erzeugt bei mir Schutzverletzungen und endet mit dem IDE Totalabsturz...
Habe .NET 1.1 und die zugehörige API installiert und auch erfolgreich verwendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz