AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tapi Callback Funktion darf nicht in Klasse sein

Ein Thema von Jumpy · begonnen am 26. Nov 2012 · letzter Beitrag vom 27. Nov 2012
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:01
Hallo,

ich versuche eine vorhandene Anwendung objektorientiert neu zu erstellen, die sich über die Tapi mit unserer Telefonanlage beschäftigt. Ich habe als Objekte Lines, Devices und Calls erstellt und möchte nun als letztes ein Objekt erstellen, dass diese anderen Objekte verwalten kann, wenn man so will das TapiApp-Objekt.
Dieses soll auch die Tapi initialisieren und und die Zugriffe darauf steuern. Das Problem ist, das beim initialisieren der Tapi, dieser eine Callback-Funktion übergeben werden muss, die aber nicht in einer Klasse liegen darf!!!
Eine entsprechende nun nackt im Implememntation-Teil erstellte Funktion ist natürlich kein Problem und wird auch aufgerufen. Nur soll die Funktion ja auch alles gemeldete an das TapiApp Objekt weitergeben, aber wie kann ich das (ausser mit einer globalen Variable für das TapiApp Objekt) machen?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.623 Beiträge
 
Delphi 12 Athens
 
#2

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:13
Wie sieht der Callback denn aus? Evtl. kann man da ein wenig tricksen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:14
Ich würde das Tapi-Object vermutlich als Singleton implementieren. Der Unterschied zur globalen Variable ist natürlich nicht so wirklich groß, aber es ist doch etwas objektorientierter. Wenn mehrere Instanzen von Klassen informiert werden müssen, dann musst Du noch einen Observer implementieren. Die melden sich an der Singletonklasse an und werden von ihr über die Statusänderungen informiert.
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:15
Delphi-Quellcode:
unit MyTapiObj;

interface

type
  TMyTapiObj = class
  protected
    procedure CalledFromCallBack;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

var
  _TapiInitialized : Boolean;
  _MyTapiObjList : TObjectList;

procedure TapiCallBack;
var
  LIdx : Integer;
begin
  for LIdx := 0 to Pred( _MyTapiObjList ) do
    ( _MyTapiObjList[LIdx] as TMyTapiObj ).CalledFromCallBack;
end;

procedure TapiInitialize;
begin
  if not _TapiInitialized then
  begin

    // Initialization code goes here

    _TapiInitialized := True;
  end;
end;

constructor TMyTapiObj.Create;
begin
  inherited;
  TapiInitialize;
  _MyTapiObjList.Add( Self );
end;

destructor TMyTapiObj.Destroy;
begin
  _MyTapiObjList.Remove( Self );
  inherited;
end;

initialization

  _MyTapiObjList := TObjectList.Create( False );

finalization

  _MyTapiObjList.Free;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:20
Alternativ mal hier in der DP nach MakeProcInstance suchen. Diese Funktion generiert dir einen klassischen Funktionspointer, der aber dafür sorgt, dass dein Callback im Kontext der Objektinstanz ausgeführt wird.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#6

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:52
Wenn es keine Methode sein darf, dann kann man das dennoch als statische Klassenmethode deklarieren, welche die selbe Signaur besitzt, wie eine normale Funktion/Prozedur.

Delphi-Quellcode:
type
  TIrgendwas = class
    class function MyCallback(P: PAnsiChar): Integer; stdcall; static;
  end;

// entspricht

function MyCallback(P: PAnsiChar): Integer; stdcall;
static lässt bei Klassenmethoden das Self weg.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 13:58
@himitsu

Kann Delphi 6 schon class procedures?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#8

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 14:04
Hmmmmm, müßte man ausprobieren.
D7 kannte das (glaub ich) zumindestens schon.

(wäre ja zu toll, wenn sowas in der OH stünde ... so wie beim MSDN )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#9

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 14:30
Eigentlich ist das nicht unbedingt verkehrt, wenn hier Lösungen zu der Frage gepostet werden, die mit der Delphi-Version des Fragenden gar nicht umgesetzt werden können. Wenn jemand nach einem ähnlichen Problem sucht, mag der ja durchaus eine neuere Delphi-Version haben. Man muss sich ja nicht unnötigerweise die Sourcen verrenken.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Tapi Callback Funktion darf nicht in Klasse sein

  Alt 26. Nov 2012, 14:41
Kann Delphi 6 schon class procedures?
ja, funktioniert bereits in Delphi 6
Sven Harazim
--
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz