Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ActiveX Server CallBack Methode zuweisen!!! (https://www.delphipraxis.net/66213-activex-server-callback-methode-zuweisen.html)

Graf_Gustav 26. Mär 2006 20:00


ActiveX Server CallBack Methode zuweisen!!!
 
Hallo

für mein aktuelles Projekt verwende ich eine ActiveX Komponente. Die Typenbibliothek habe ich importiert.
Die erzeugte Komponente funktioniert gut.
Nun muss ich jedoch auf Events reagieren. Bei meinen Nachforschungen bin ich auf die untenstehende Procedure gestoßen.
Wenn ich es richtig interpretiere, benötigt der ActiveX Server eine Information über eine Callback-Routine.
Leider schaffe ich es nicht, eine Methode (Procedure, Funktion) der varCallBack Variable zuzuweisen.
Wie kann ich einem OLEVariant, eine Methode zuweisen?
Oder ist das sogar der falsche Weg?

Delphi-Quellcode:
procedure TAuthentic.attachCallBack(const bstrName: WideString; varCallBack: OleVariant);
begin
  DefaultInterface.attachCallBack(bstrName, varCallBack);
end;
Ich programmiere mit Delphi 7 Enterprise.

Robert Marquardt 27. Mär 2006 04:57

Re: ActiveX Server CallBack Methode zuweisen!!!
 
OleVaraiant ist im Prinzip wie Variant. Es kann alles aufnehmen. In diesem Fall ein Pointer, da ein Callback ein Zeiger auf eie Funktion ist.

Graf_Gustav 28. Mär 2006 07:12

Re: ActiveX Server CallBack Methode zuweisen!!!
 
Vermutlich bin ich einfach zu bl.. um einen Methodenzeiger einer Variable vom Typ OLEVariant
zuweisen. Ich kann eine Zuweisung über eine integer Typkonvertierung erreichen.
Allerdings schmiert mir dann das Programm ab. Vermutlich muß ich mir doch das ganze Thema
Server-Callbacks und Connection Points reinziehen!
:cry:

Robert Marquardt 28. Mär 2006 07:45

Re: ActiveX Server CallBack Methode zuweisen!!!
 
Eine Methode wird nicht gehen. Warum wohl habe ich Funktion geschrieben?
Es sollte auch stdcall als Calling convention benutzt werden.

Graf_Gustav 29. Mär 2006 14:44

Re: ActiveX Server CallBack Methode zuweisen!!!
 
Vielen Dank für die Antwort,

das mit der Funktion ist mir schon klar. Ich habe mich nicht genau genug und präzise ausgedrückt :oops: .
In den folgenden Zeilen ist der Aufruf der attachCallBack Routine in JavaScript dargestellt.

Code:
JavaScript example:

objPlugIn.attachCallBack("ondragover",OnDragOver);

function OnDragOver()
{
// Hier der Code
}
Die Function OnDragOver hat keinen Rückgabewert. Eine Funktion in Delphi hat meines Wissens immer einen Rückgabewert.
Eine Funktion kann man einer OLEVariant Variable zuordnen. Bei einer Procedur ist mir das noch nicht gelungen.

Der folgende Delphi Code führt zu einem Fehler --Falscher Parameter--.
Ich habe außer word auch andere Typen versucht. Kein Erfolg

Delphi-Quellcode:
function test():word; stdcall
begin
  form1.label1.caption := 'test';
end;


procedure TForm1.Button3Click(Sender: TObject);
var varCallBack : OLEvariant;
     F: function():word; stdcall;

begin
  F := test;
  varCallBack := F;
  self.Authentic1.attachCallBack('ondragover', F);
end;
Es stellen sich mir zwei Fragen.
1. gibt es eine funktion die vergleichbar der javaScript Funktion ist?
2. Wie kann ich eine Procedure einer OLEVariant Variable zuordnen?
3. Bin ich total auf dem Holzweg??

Nochmals Danke für die Hilfe!!

shmia 29. Mär 2006 18:36

Re: ActiveX Server CallBack Methode zuweisen!!!
 
Ein OleVariant kann insbesondere eine Dispatch-Schnittstelle aufnehmen.
Du müsstest also ein Objekt mit einer Dipatch-Schnittstelle erzeugen und TAuthentic.attachCallBack zum Frass vorsetzen.
Das TAuuthic-Objekt wird nun wahrscheinlich das übergebene Dispatch-Interface nehmen und über Invoke eine Methode mit dem Name "bstrName" aufrufen.

Dies ist eine sehr seltsame Art (da nicht Microsaft Standard) ein Callback aufzurufen.
Aber für Anwendung in Scriptsprachen mag dies OK sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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