Français
Forum

TAPI-Problem

 

Matthias
Arlt
allô dans qui Runde

j'ai mich la fois im Netz umgesehen et mir aus einigen VB- et Delphi-Codes folgende TAPI-Routine zusammengebastelt. qui funktioniert soweit aussi. Beim Aufruf de linemakecall wird qui liaison aussi korrekt aufgebaut. Allerdings knallts ensuite avec qui bekannten annonce Anwendungsfehler: Exception....... j'ai déjà Verschiedenes durchprobiert, mais sans positives Ergebnis. et bevor je mich ici irgendwie verrenne, hoffe je très sur Eure hilfreichen idées.
ici la fois qui Code:
Def LineInit(5) !tapi32,lineInitialize
Def LineInitEx(7) !tapi32,lineInitializeExA
Def LineNegotiateAPIVersion(6) !tapi32,lineNegotiateAPIVersion
Def LineGetDevCaps(5) !tapi32,lineGetDevCaps
Def LineOpen(9) !tapi32,lineOpenA
Def LineSetStatusMessages(3) !tapi32,lineSetStatusMessages
Def LineMakeCall(5) !tapi32,lineMakeCall
Def LineShutdown(1) !tapi32,lineShutdown
declare TapiHdl#,TapiHdl&,TapiNumDevs#,TapiCallBack#,TapiVer#,extID#,ghLine#,ghCall#
declare TapiLineDevCaps#,LineCallParams#,TapiReturn&,TapiDevs&,ChooseDev&,DialNumber$
DialNumber$=123456 fiktive numéro de téléphone

proc MakeTapiCall

    dim TapiHdl#,4
    dim TapiCallBack#,4
    dim TapiNumDevs#,4
    dim extID#,16
    dim ghLine#,4
    dim ghCall#,4
    dim TapiVer#,4
    long TapiVer#,0=$00020000	dwTapiVersion
    dim TapiLineDevCaps#,270
    long TapiLineDevCaps#,0=270     dwTotalSize
    dim LineCallParams#,236
    long LineCallParams#,0=236      dwTotalSize
    long LineCallParams#,4=1        dwBearerMode = LINEBEARERMODE_VOICE
    long LineCallParams#,16=4       dwMediaMode = LINEMEDIAMODE_INTERACTIVEVOICE
    long LineCallParams#,4=8        dwBearerMode = LINEBEARERMODE_DATA
    long LineCallParams#,16=16      dwMediaMode = LINEMEDIAMODE_DATAMODEM
    long LineCallParams#,20=2       dwCallParamFlags = LINECALLPARAMFLAGS_IDLE
    long LineCallParams#,24=1       dwAddressMode = LINEADDRESSMODE_ADDRESSID
    long LineCallParams#,28=0       dwAddressID
    TAPI initialisieren:
    TapiReturn&=LineInit(TapiHdl#,%HINSTANCE,TapiCallBack#,0,TapiNumDevs#)
    TapiReturn&=LineInitEx(TapiHdl#,%HINSTANCE,TapiCallBack#,0,TapiNumDevs#,TapiVer#,0)
    imprimer LineInitEx +str$(TapiReturn&)
    TapiHdl&=long(TapiHdl#,0)
    TapiDevs&=long(TapiNumDevs#,0)
    imprimer TapiNumDevs +str$(long(TapiNumDevs#,0))
    alle Tapi-Devices abfragen jusqu'à Modem trouvé...
    ChooseDev&=0

    whileloop TapiDevs&

        ChooseDev& = &loop - 1
        bistrot trop verwendende API-Version aushandeln:
        TapiReturn&=LineNegotiateAPIVersion(TapiHdl&,ChooseDev&,$00020000,$00030000,TapiVer#,extID#)
        imprimer NegotiateAPI +str$(TapiReturn&)
        imprimer LocalAPI $000+hex$(long(TapiVer#,0))

        si TapiReturn& = 0

            Device-paramètre abfragen:
            TapiReturn&=LineGetDevCaps(TapiHdl&,ChooseDev&,long(TapiVer#,0),0,TapiLineDevCaps#)
            imprimer GetDevCaps +str$(TapiReturn&)
            imprimer dwBearerModes +str$(long(TapiLineDevCaps#,52))
            imprimer dwMaxRate +str$(long(TapiLineDevCaps#,56))
            imprimer dwMediaModes +str$(long(TapiLineDevCaps#,60))

            si TapiReturn& = 0

                si Modem trouvé...

                ifnot (long(TapiLineDevCaps#,52)=1) and (long(TapiLineDevCaps#,56)>=9600) and (long(TapiLineDevCaps#,60)=16)

                    si (long(TapiLineDevCaps#,52)=1) or (long(TapiLineDevCaps#,56)>=9600) or (long(TapiLineDevCaps#,60)=16)

                        clear ghLine#
                        TapiReturn&=LineOpen(TapiHdl&,ChooseDev&,ghLine#,long(TapiVer#,0),0,0,1,0,0)
                        imprimer LineOpen +str$(TapiReturn&)

                        si TapiReturn& = 0

                            TapiReturn&=LineSetStatusMessages(long(ghLine#,0),$2+$4+$8+$80+$100+$400+$40000,1)
                            imprimer SetStatusMessages +str$(TapiReturn&)

                            si TapiReturn& = 0

                                imprimer Anwahl de +DialNumber$+  avec Gerät +str$(ChooseDev&)
                                clear ghCall#
                                TapiReturn&=LineMakeCall(long(ghLine#,0),ghCall#,addr(DialNumber$),0,LineCallParams#)
                                imprimer MakeCall +str$(TapiReturn&)
                                messagebox(Anwahl erfolgreich !,,0)
                                imprimer Anwahl erfolgreich !
                                cas TapiHdl& <> 0 : LineShutdown(TapiHdl&)
                                pause

                            endif

                        endif

                        cas TapiHdl& <> 0 : LineShutdown(TapiHdl&)

                    endif

                endif

            endif

        endif

    Wend

    dispose TapiHdl#
    dispose TapiNumDevs#
    dispose extID#
    dispose ghLine#
    dispose ghCall#
    dispose TapiCallBack#
    dispose TapiVer#
    dispose TapiLineDevCaps#
    dispose LineCallParams#

endproc

cls
MakeTapiCall
waitinput

Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
23.01.2008  
 



chez beiden Profanversionen (Profan 7 ff. / 9.1sh) Absturz à selber Stelle?

malheureusement habe je ne...aucune tapifähiges Gerät um es wirklich testen trop peut...

PS: Codes pas dans
mais dans [CODE]
 
23.01.2008  
 




Matthias
Arlt
allô IF
oui, Absturz à gleicher Stelle. avec dem Unterschied, qui chez Profan 7 qui liaison jusqu'à zum Wegklicken qui Fehlermeldung bestehen bleibt et chez XProfan tout de suite, alors encore au cours de des Wahlvorgangs abbricht. suis daher quelque chose perplexe...

dans CODE statt dans BOX: oui, eigentlich bien sûr. j'ai momentan testweise une kleineren Monitor dans Gebrauch avec seulement 800x600. là läßt sich qui XProfan-page quelque chose schwierig handhaben. et là passiert cela déjà la fois...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
23.01.2008  
 



Könntest Du la fois un Verzeichnis c:p00x anlegen et folgenden Code effectuer?
proc __xpse__endofprogram__

    REM {{SOMEEXTRAENDCOMMAND}}
    end

endproc

DECLARE TAPIHDL#,TAPIHDL&,TAPINUMDEVS#,TAPICALLBACK#,TAPIVER#,EXTID#,GHLINE#,GHCALL#,TAPILINEDEVCAPS#,LINECALLPARAMS#,TAPIRETURN&,TAPIDEVS&,CHOOSEDEV&,DIALNUMBER$
declare __gallog__%
__gallog__%=0

proc __log__

    parameters u$,s$
    assign #89,C:P00X	api.debug
    append #89
    imprimer #89,mkstr$(chr$(9),__gallog__%)+s$
    close #89
    return u$

endproc

assign #89,C:P00X	api.debug
rewrite #89
close #89
__log__ @$(0), DEF LINEINIT(5) !*tapi32*,*lineInitialize*
DEF LINEINIT(5) !tapi32,lineInitialize
__log__ @$(0), DEF LINEINITEX(7) !*tapi32*,*lineInitializeExA*
DEF LINEINITEX(7) !tapi32,lineInitializeExA
__log__ @$(0), DEF LINENEGOTIATEAPIVERSION(6) !*tapi32*,*lineNegotiateAPIVersion*
DEF LINENEGOTIATEAPIVERSION(6) !tapi32,lineNegotiateAPIVersion
__log__ @$(0), DEF LINEGETDEVCAPS(5) !*tapi32*,*lineGetDevCaps*
DEF LINEGETDEVCAPS(5) !tapi32,lineGetDevCaps
__log__ @$(0), DEF LINEOPEN(9) !*tapi32*,*lineOpenA*
DEF LINEOPEN(9) !tapi32,lineOpenA
__log__ @$(0), DEF LINESETSTATUSMESSAGES(3) !*tapi32*,*lineSetStatusMessages*
DEF LINESETSTATUSMESSAGES(3) !tapi32,lineSetStatusMessages
__log__ @$(0), DEF LINEMAKECALL(5) !*tapi32*,*lineMakeCall*
DEF LINEMAKECALL(5) !tapi32,lineMakeCall
__log__ @$(0), DEF LINESHUTDOWN(1) !*tapi32*,*lineShutdown*
DEF LINESHUTDOWN(1) !tapi32,lineShutdown
__log__ @$(0), DIALNUMBER$=*725372*
DIALNUMBER$=725372
__log__ @$(0), #DEFINE PROCEDURE { proc MAKETAPICALL }/* LINE:12
proc MAKETAPICALL
__log__ @$(0), PROCEED PROCEDURE { proc MAKETAPICALL } /* LINE:12 {
inc __gallog__%
__log__ @$(0), DIM TAPIHDL#,4
DIM TAPIHDL#,4
__log__ @$(0), DIM TAPICALLBACK#,4
DIM TAPICALLBACK#,4
__log__ @$(0), DIM TAPINUMDEVS#,4
DIM TAPINUMDEVS#,4
__log__ @$(0), DIM EXTID#,16
DIM EXTID#,16
__log__ @$(0), DIM GHLINE#,4
DIM GHLINE#,4
__log__ @$(0), DIM GHCALL#,4
DIM GHCALL#,4
__log__ @$(0), DIM TAPIVER#,4
DIM TAPIVER#,4
__log__ @$(0), LONG TAPIVER#,0=$00020000
LONG TAPIVER#,0=$00020000
__log__ @$(0), DIM TAPILINEDEVCAPS#,270
DIM TAPILINEDEVCAPS#,270
__log__ @$(0), LONG TAPILINEDEVCAPS#,0=270
LONG TAPILINEDEVCAPS#,0=270
__log__ @$(0), DIM LINECALLPARAMS#,236
DIM LINECALLPARAMS#,236
__log__ @$(0), LONG LINECALLPARAMS#,0=236
LONG LINECALLPARAMS#,0=236
__log__ @$(0), LONG LINECALLPARAMS#,4=1
LONG LINECALLPARAMS#,4=1
__log__ @$(0), LONG LINECALLPARAMS#,16=16
LONG LINECALLPARAMS#,16=16
__log__ @$(0), LONG LINECALLPARAMS#,20=2
LONG LINECALLPARAMS#,20=2
__log__ @$(0), LONG LINECALLPARAMS#,24=1
LONG LINECALLPARAMS#,24=1
__log__ @$(0), LONG LINECALLPARAMS#,28=0
LONG LINECALLPARAMS#,28=0
__log__ @$(0), TAPIRETURN&=LINEINIT(TAPIHDL#,%HINSTANCE,TAPICALLBACK#,0,TAPINUMDEVS#)
TAPIRETURN&=LINEINIT(TAPIHDL#,%HINSTANCE,TAPICALLBACK#,0,TAPINUMDEVS#)
__log__ @$(0), PRINT *LineInitEx *+STR$(TAPIRETURN&)
PRINT LineInitEx +STR$(TAPIRETURN&)
__log__ @$(0), TAPIHDL&=LONG(TAPIHDL#,0)
TAPIHDL&=LONG(TAPIHDL#,0)
__log__ @$(0), TAPIDEVS&=LONG(TAPINUMDEVS#,0)
TAPIDEVS&=LONG(TAPINUMDEVS#,0)
__log__ @$(0), PRINT *TapiNumDevs *+STR$(LONG(TAPINUMDEVS#,0))
PRINT TapiNumDevs +STR$(LONG(TAPINUMDEVS#,0))
__log__ @$(0), CHOOSEDEV&=0
CHOOSEDEV&=0
__log__ @$(0), WHILELOOP { WHILELOOP TAPIDEVS& } /* LINE:36 {
WHILELOOP TAPIDEVS&
__log__ @$(0), CHOOSEDEV&=&LOOP - 1
CHOOSEDEV&=&LOOP - 1
__log__ @$(0), TAPIRETURN&=LINENEGOTIATEAPIVERSION(TAPIHDL&,CHOOSEDEV&,$00020000,$00030000,TAPIVER#,EXTID#)
TAPIRETURN&=LINENEGOTIATEAPIVERSION(TAPIHDL&,CHOOSEDEV&,$00020000,$00030000,TAPIVER#,EXTID#)
__log__ @$(0), PRINT *NegotiateAPI *+STR$(TAPIRETURN&)
PRINT NegotiateAPI +STR$(TAPIRETURN&)
__log__ @$(0), PRINT *LocalAPI $000*+HEX$(LONG(TAPIVER#,0))
PRINT LocalAPI $000+HEX$(LONG(TAPIVER#,0))
__log__ @$(0), IF { IF TAPIRETURN&=0 } /* LINE:41 {
IF TAPIRETURN&=0
__log__ @$(0), TAPIRETURN&=LINEGETDEVCAPS(TAPIHDL&,CHOOSEDEV&,LONG(TAPIVER#,0),0,TAPILINEDEVCAPS#)
TAPIRETURN&=LINEGETDEVCAPS(TAPIHDL&,CHOOSEDEV&,LONG(TAPIVER#,0),0,TAPILINEDEVCAPS#)
__log__ @$(0), PRINT *GetDevCaps *+STR$(TAPIRETURN&)
PRINT GetDevCaps +STR$(TAPIRETURN&)
__log__ @$(0), PRINT *dwBearerModes *+STR$(LONG(TAPILINEDEVCAPS#,52))
PRINT dwBearerModes +STR$(LONG(TAPILINEDEVCAPS#,52))
__log__ @$(0), PRINT *dwMaxRate *+STR$(LONG(TAPILINEDEVCAPS#,56))
PRINT dwMaxRate +STR$(LONG(TAPILINEDEVCAPS#,56))
__log__ @$(0), PRINT *dwMediaModes *+STR$(LONG(TAPILINEDEVCAPS#,60))
PRINT dwMediaModes +STR$(LONG(TAPILINEDEVCAPS#,60))
__log__ @$(0), IF { IF TAPIRETURN&=0 } /* LINE:47 {
IF TAPIRETURN&=0
__log__ @$(0), IFNOT { IFNOT (LONG(TAPILINEDEVCAPS#,52)=1) AND (LONG(TAPILINEDEVCAPS#,56)>=9600) AND (LONG(TAPILINEDEVCAPS#,60)=16) } /* LINE:48 {
IFNOT (LONG(TAPILINEDEVCAPS#,52)=1) AND (LONG(TAPILINEDEVCAPS#,56)>=9600) AND (LONG(TAPILINEDEVCAPS#,60)=16)
__log__ @$(0), IF { IF (LONG(TAPILINEDEVCAPS#,52)=1) OU (LONG(TAPILINEDEVCAPS#,56)>=9600) OU (LONG(TAPILINEDEVCAPS#,60)=16) } /* LINE:49 {
IF (LONG(TAPILINEDEVCAPS#,52)=1) OU (LONG(TAPILINEDEVCAPS#,56)>=9600) OU (LONG(TAPILINEDEVCAPS#,60)=16)
__log__ @$(0), CLEAR GHLINE#
CLEAR GHLINE#
__log__ @$(0), TAPIRETURN&=LINEOPEN(TAPIHDL&,CHOOSEDEV&,GHLINE#,LONG(TAPIVER#,0),0,0,1,0,0)
TAPIRETURN&=LINEOPEN(TAPIHDL&,CHOOSEDEV&,GHLINE#,LONG(TAPIVER#,0),0,0,1,0,0)
__log__ @$(0), PRINT *LineOpen *+STR$(TAPIRETURN&)
PRINT LineOpen +STR$(TAPIRETURN&)
__log__ @$(0), IF { IF TAPIRETURN&=0 } /* LINE:53 {
IF TAPIRETURN&=0
__log__ @$(0), TAPIRETURN&=LINESETSTATUSMESSAGES(LONG(GHLINE#,0),$2+$4+$8+$80+$100+$400+$40000,1)
TAPIRETURN&=LINESETSTATUSMESSAGES(LONG(GHLINE#,0),$2+$4+$8+$80+$100+$400+$40000,1)
__log__ @$(0), PRINT *SetStatusMessages *+STR$(TAPIRETURN&)
PRINT SetStatusMessages +STR$(TAPIRETURN&)
__log__ @$(0), IF { IF TAPIRETURN&=0 } /* LINE:56 {
IF TAPIRETURN&=0
__log__ @$(0), PRINT *Anwahl de *+DIALNUMBER$+* avec Gerät *+STR$(CHOOSEDEV&)
PRINT Anwahl de +DIALNUMBER$+ avec Gerät +STR$(CHOOSEDEV&)
__log__ @$(0), CLEAR GHCALL#
CLEAR GHCALL#
__log__ @$(0), TAPIRETURN&=LINEMAKECALL(LONG(GHLINE#,0),GHCALL#,ADDR(DIALNUMBER$),0,LINECALLPARAMS#)
TAPIRETURN&=LINEMAKECALL(LONG(GHLINE#,0),GHCALL#,ADDR(DIALNUMBER$),0,LINECALLPARAMS#)
__log__ @$(0), PRINT *MakeCall *+STR$(TAPIRETURN&)
PRINT MakeCall +STR$(TAPIRETURN&)
__log__ @$(0), MESSAGEBOX(*Anwahl erfolgreich !*,**,0)
MESSAGEBOX(Anwahl erfolgreich !,,0)
__log__ @$(0), IF { IF TAPIHDL& <> 0 } /* LINE:62 {
IF TAPIHDL& <> 0
__log__ @$(0), LINESHUTDOWN(TAPIHDL&)
LINESHUTDOWN(TAPIHDL&)
ENDIF
__log__ @$(0), }
__log__ @$(0), BREAK
BREAK
ENDIF
__log__ @$(0), }
ENDIF
__log__ @$(0), }
__log__ @$(0), IF { IF TAPIHDL& <> 0 } /* LINE:68 {
IF TAPIHDL& <> 0
__log__ @$(0), LINESHUTDOWN(TAPIHDL&)
LINESHUTDOWN(TAPIHDL&)
ENDIF
__log__ @$(0), }
ENDIF
__log__ @$(0), }
ENDIF
__log__ @$(0), }
ENDIF
__log__ @$(0), }
ENDIF
__log__ @$(0), }
ENDWHILE
__log__ @$(0), }
__log__ @$(0), DISPOSE TAPIHDL#
DISPOSE TAPIHDL#
__log__ @$(0), DISPOSE TAPINUMDEVS#
DISPOSE TAPINUMDEVS#
__log__ @$(0), DISPOSE EXTID#
DISPOSE EXTID#
__log__ @$(0), DISPOSE GHLINE#
DISPOSE GHLINE#
__log__ @$(0), DISPOSE GHCALL#
DISPOSE GHCALL#
__log__ @$(0), DISPOSE TAPICALLBACK#
DISPOSE TAPICALLBACK#
__log__ @$(0), DISPOSE TAPIVER#
DISPOSE TAPIVER#
__log__ @$(0), DISPOSE TAPILINEDEVCAPS#
DISPOSE TAPILINEDEVCAPS#
__log__ @$(0), DISPOSE LINECALLPARAMS#
DISPOSE LINECALLPARAMS#
dec __gallog__%
__log__ @$(0), }
endproc
__log__ @$(0), CLS
CLS
__log__ @$(0), MAKETAPICALL
MAKETAPICALL
__log__ @$(0), WAITINPUT
WAITINPUT
__log__ @$(0), REM ---ENDOFFILE---
REM ---ENDOFFILE---
__xpse__endofprogram__

...et anschließend qui c:p00xapi.debug ici posten?
 
23.01.2008  
 




Matthias
Arlt
déjà erledigt ! Debug-Dossier im Anhang.

3 kB
Hochgeladen:23.01.2008
Downloadcounter316
Download
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
23.01.2008  
 



qui Messagebox Anwahl erfolgreich ! erscheint et bleibt jusqu'à Du cet schließt?

Unausreichende Bereichsdimensionierung ou bien un Callbackproblem - mais c'est rein spekulativ.
 
23.01.2008  
 




Matthias
Arlt
oui, qui Messagebox bleibt jusqu'à zum Schließen. qui Bereichsdimensionierung J'ai eu aussi d'abord dans le doute, habe mais déjà probehalber qui Werte vervielfacht. malheureusement aucun Changement...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
23.01.2008  
 



lpfnCallback, Dritter Param lineInitializeEx sollte un Long son, qui Adresse einer Procédure quelle avec procAddr trop beziehen ist. c'est chez Dir pas qui le cas - teste la fois...
 
23.01.2008  
 




Matthias
Arlt
cela CallBack... Stimmt, cela wäre encore ne Possibilité. je werde es testen. Doit mich mais, quoi qui Verwendung de CallBacks dans Profan angeht, erstmal einlesen. là je vorwiegend Profan7 avec bien fonctionnement et schnellen Workarrounds verwende et alles Übrige avec Assembler-Dlls löse, suis je avec cela eigtl. garnicht vertraut...

et überhaupt: Incidemment erstmal merci IF, pour Votre Unterstützung. je dois maintenant erstmal démolir. demain gehts plus...

Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
23.01.2008  
 




Matthias
Arlt
IF, Du hattest droite. Es lag réellement am CallBack. Ist maintenant zwar avec einer völlig vider Procédure seulement une Art Dummy, mais es funktioniert immerhin.

merci nochmals
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
24.01.2008  
 



Gern.

[offtopic]@Roland: *erinner*procAddrStack* - ensuite ginge aussi korrekte wProc[/offtopic]
 
24.01.2008  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

7.815 Views

Untitledvor 0 min.
Axel Berse10.06.2023
rquindt23.05.2016
Helmut12.01.2013

Themeninformationen

cet Thema hat 2 participant:

Matthias Arlt (6x)
iF (5x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie