Forum | | | | 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] |
| | | | |
| | 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? |
| | | | |
| | Matthias Arlt | déjà erledigt ! Debug-Dossier im Anhang. |
| | | 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. |
| | | | |
| | 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... |
| | | | |
| | 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] |
| | | | |
|
répondreOptions du sujet | 8.239 Views |
Themeninformationencet Thema hat 2 participant: |