Tapi

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

olaf870
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 128
Registriert: Mi, 26. Okt 2005 18:41
Wohnort: Berlin
Kontaktdaten:

Beitrag von olaf870 »

Hallo,

ist ja richtig "Bedarf" nach so etwas da!

(Klar: Supi-Sache, wenn bei einem Anruf schon Kontaktdatensatz aufgerufen wird und man schon während man den Höhrer abhebt, die Kontakt-Historie sehen kann.)

Wie ich erfahren habe läßt sich (auf einem sauberen Rechner) das VC-Projekt nicht bauen, weil wohl leider ein noch paar include-Dateien fehlen.

Habt also noch ein wenig Geduld, ich werde das erstmal für Euch beheben. Denn nix nervt mehr als fremder Code, der sich nicht bauen läßt, oder? Mir fällt da nur eine Sache ein, die das noch toppt: Fremdcode, der sich erst nach viel Mühe und Aufwand zwar bauen läßt aber dann nicht funktioniert. (.. es soll gelegentlich ja solche Leute geben, die einem so etwas zu schicken.)

Dazu muß ich aber erst mal einen unbelasteten Rechner finden.

Zwischenzeitlich bitte ich Euch, mir eine Mail mit dem Betreff "TAPI3 Sourcen" an "mail chr(64) c o m b i f i n a n z chr( 46) d e"
zu schicken, damit ich mir die Sucherei hier im Forum nach euren Mail-Adressen sparen kann (die Mailfunktion im Forum erlaubt ja keine Anhänge!?).

Wer den Code (VC-Projekt) mal bei sich probebauen will/kann, melde sich auch.

Gruß
Olaf870
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Olaf,
bist du mit deiner Tapi-Schnittstelle schon weiter gekommen ?
Viele Grüße
Wolfgang
olaf870
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 128
Registriert: Mi, 26. Okt 2005 18:41
Wohnort: Berlin
Kontaktdaten:

Beitrag von olaf870 »

Hallo,

meine TAPI hat noch ein Problem: Man kann das Ding nicht in eine DLL einbauen. Wenn man es doch tut, dann geschieht unberechenbares.

Ein C++-Spezi sagte, es fehlen wohl noch paar Zeilen Code, will sich aber erst darum richtig kümmern, wenn er seine Arbeit abrechnen darf. Wie er meinte, wird er es wohl in 4 Stunden schaffen. Bisher hat er keinen Auftrag von mir bekommen.

Hat jemand Lust sich zu beteiligen?

Gruß
Olaf
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 139
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch
Hat sich bedankt: 5 Mal

Toptapi

Beitrag von Schubi »

Hallo Thomas,

beim rumtesten mit Toptapi bin ich auf Deinen Beitrag gestossen:
thomas hat geschrieben:
Die Funktionen LP_MYCALLBACK, _MYLOOP, _MYLOOP_QUIT, _PTR_TO_STR sind in C++
geschrieben und im Projekt als Objectdatei hinzugelinkt.
Wo hast Du diese C-Routinen her bzw. kannst Du mir hier weiterhelfen?
Bei mir liefert TapiLineInitEx immer Null, d.h. kein Erfolg.
Habe aber auch keinen Schimmer, wie ich diese Callbackprozedur hinbekomme.
Noch eine Frage: Ruft man die Dll-Functions mit STDCALL oder mit CDECL auf?
Grüße Steffen
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Tapi

Beitrag von brandelh »

Hallo,

meistens nutzt man STDCALL, das könnte aber natürlich hier anders sein ... im C Quellcode sollte aber ein ähnlicher Parameter angegeben sein.

Xbase++ unterstützt selbst keine CALLBACK Prozeduren, aber von Pablo Botela gibt es "The XppCbk.exe callback compiler", mit dem man eine OBJ aus einer Xbase++ Funktion erstellen kann, die dann den Code der CALLBACK Funktion enthält.
Ich selbst habe sowas noch nicht genutzt, aber unter diesem Link solltest du nähere Infos finden:

http://www.xbwin.com/ot4xbXHlp/ unter Tutorial.

XppCbk.EXE müsste dort eigentlich auch zu finden sein ... oder bei Alaska im Downloadbereich ... so über google habe ich dies gefunden (ganz unten):

http://www.xbwin.com/_main_/docs_and_resources.html

Auf http://www.xbwin.com ist der Aufruf ganz rechts oben versteckt ;-)
Gruß
Hubert
thomas
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Fr, 23. Sep 2005 16:07
Wohnort: Bad Oldesloe
Kontaktdaten:

TopTapi und Callback

Beitrag von thomas »

Hallo Steffen,

hier findest du das Bespiel zur TopTapi mit Callback.
BEISPIEL.PRG
(5.93 KiB) 436-mal heruntergeladen
Die C++ Routinen _LP_MyCallBack, _MyLoop, _MyLoopQuit und _PTR_To_STR sind bereit in Call11p.obj
übersetzt.

Viele Grüße
Thomas
Benutzeravatar
Pablo Botella
Rookie
Rookie
Beiträge: 14
Registriert: Do, 18. Dez 2008 20:14
Wohnort: Santiago de Compostela - Spain
Kontaktdaten:

Re: Tapi

Beitrag von Pablo Botella »

Schubi hat geschrieben:Hallo Thomas,

beim rumtesten mit Toptapi bin ich auf Deinen Beitrag gestossen:
thomas hat geschrieben:
Die Funktionen LP_MYCALLBACK, _MYLOOP, _MYLOOP_QUIT, _PTR_TO_STR sind in C++
geschrieben und im Projekt als Objectdatei hinzugelinkt.
Wo hast Du diese C-Routinen her bzw. kannst Du mir hier weiterhelfen?
Bei mir liefert TapiLineInitEx immer Null, d.h. kein Erfolg.
Habe aber auch keinen Schimmer, wie ich diese Callbackprozedur hinbekomme.
Noch eine Frage: Ruft man die Dll-Functions mit STDCALL oder mit CDECL auf?
Ich war Thomas helfen, dieses C-Funktionen für den Einsatz mit lineInitialize () aber das Lesen docs habe ich entdeckt, dass nicht erforderlich, da TAPI-V 2.0 als neue TAPI-Funktion LineInitializeEx () erlaubt die Wahl zwischen 3 Modi

LINEINITIALIZEEXOPTION_USEHIDDENWINDOW
Dies ist die alte Methode mit einem versteckten Fenster in einem separaten Thread, das war der Grund dafür, dass der Rückruf wurde in einer nicht Xbase + + Threads, so war zu delegieren alle Veranstaltungen zu einem Thread von Xbase + +

LINEINITIALIZEEXOPTION_USEEVENT
LINEINITIALIZEEXOPTION_USECOMPLETIONPORT

Ich denke, die Verwendung TAPI mit Xbase + + am besten geeignet ist LINEINITIALIZEEXOPTION_USEEVENT ( 2 )

Code: Alles auswählen

#include "ot4xb.ch"
// ---------------------------------------------------------------------------
proc main()
local nDeviceId   := 9  // change this value for your device ID
local hLineApp    := 0
local nDevCnt     := 0
local nVersion    := 0x20000
local aLineParams := {24,0,0,2,0,0}
local result      := @tapi32:lineInitializeExA(@hLineApp,AppInstance(),0,;
                     "Test",@nDevCnt,@nVersion,@aLineParams)
local hLine       := 0         
local conCargo    := 0 // _var2con( XbaseArrayCodeblockOrObjectVariable )

if result == 0
   ? "lineInitializeEx() -> OK"
   Thread():New():Start({|| LineEventsProc( aLineParams[5] , hLineApp)} )
   result := @tapi32:lineOpenA(hLineApp,nDeviceId,@hLine,;
                               nVersion,0,conCargo,2,0x12,0)

   if result == 0
      ? "lineOpen() -> OK"
      while inkey(0) != 27 ; end
      @tapi32:lineClose( hLine )
   else
      ? "lineOpen() -> FAIL"
   end               
   @tapi32:lineShutdown( hLineApp )
else
   ? "lineInitializeEx() -> FAIL"
end
if conCargo != 0 ; _conRelease( conCargo ) ; end   
? "Press a key to exit .... "
inkey(0)
return
// ---------------------------------------------------------------------------
function LineEventsProc(hEvent,hLineApp)
local aMsg := AFill(Array(6),0)
? "------  LineEventsProc() ENTER ----- "
while( @kernel32:WaitForSingleObject(hEvent,-1) != -1 )
   while( @tapi32:lineGetMessage(hLineApp,@aMsg,0) == 0 )
      ? "------  LineEventsProc() ----- "
      ? cPrintf( "hDevice     : 0x%08X" , aMsg[1] )
      ? cPrintf( "dwMessageId : 0x%08X" , aMsg[2] )
      ?          "cargo       : " , _con2var( aMsg[3] )
      ? cPrintf( "dwParam1    : 0x%08X" , aMsg[4] )
      ? cPrintf( "dwParam2    : 0x%08X" , aMsg[5] )
      ? cPrintf( "dwParam3    : 0x%08X" , aMsg[6] )
      ? "------------------------------ "
   end
end
? "------  LineEventsProc() EXIT ----- "
return NIL
// ---------------------------------------------------------------------------


Grüße,
Pablo Botella
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 139
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch
Hat sich bedankt: 5 Mal

Re: Tapi

Beitrag von Schubi »

Danke Euch allen.
Inzwischen läuft meine Tapi-Schnittstelle.
Grüße Steffen
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Tapi

Beitrag von Koverhage »

Hallo,

ich sollte eine folgendes in eine Xbase++ Anwendung einbauen:

Telekom Telefonanlage
wenn Anruf kommt, in dbf nachsehen ob es die Nummer gibt.
wenn ja, Name bzw. Historie anzeigen.

Hat das jemand schon gemacht ?

Für den Anfang würde ich gerne eine Wählhilfe erstellen, z.B. beim ausgewählten Kunden auf Tel. klicken und der Wahlvorgang startet dann.

Würde mich über Beispiele freuen, aber auch über Angebote zur Realisierung, allerdings sollte bei Angeboten Erfahrung mit
Tapi, etc. vorhanden sein.
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Tapi

Beitrag von Tom »

Hallo, Klaus.

Anrufe auslösen geht mit TapiRequestMakeCall() ganz simpel. Und für den Rest (Leitungsüberwachung) findest Du alles nötige eigentlich auch in diesem Thread.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Tapi

Beitrag von Koverhage »

Hallo Tom,

danke, habe das mal eingebaut, aber
fehler.jpg
fehler.jpg (17.98 KiB) 7746 mal betrachtet
Wenn ich z.B. über das ComCenter Fon gehe, wird die Nummer gewählt.

Muss ich sonst noch was machen ?

Gruß
Klaus
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Tapi

Beitrag von Tom »

Möglicherweise musst Du eine Leitung holen ("0" oder "0," vor die anzurufende Nummer setzen).
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Tapi

Beitrag von Koverhage »

Tom,

egal ob ich im Xbase++ Programm oder in der Wählhilfe selbst wählen lasse kommt die
Fehlermeldung.
Hingegen kann ich ja über ComCenter Fon wählen.
Werde das mal im Auge behalten.
Gruß
Klaus
olaf870
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 128
Registriert: Mi, 26. Okt 2005 18:41
Wohnort: Berlin
Kontaktdaten:

Re: Tapi

Beitrag von olaf870 »

EIne fertige Tapilösung mit Xbase++-Sourcecode zur Leitungsüberwachung und Meldung der Anrufernummer in das Xbase Programm gibt es hier: http://www.combifinanz.de/tools/.
Mittlerweile kann das ganze auch in eine DLL eingebunden werden und funktioniert auch mit Internet-Telefonie.
Grüße
Olaf870
Grüße
Olaf870
http://combifinanz.de
Antworten