Foro | | | | Matthias Arlt | ¡Hola en el Runde
Yo habe mich veces en el Netz umgesehen y me de algunos VB- y Delphi-Codes folgende TAPI-Rutina zusammengebastelt. El funktioniert soweit auch. Beim Aufruf de linemakecall se el Verbindung auch korrekt aufgebaut. Aunque knallts entonces con el bekannten Meldung Anwendungsfehler: Exception....... Yo habe ya Verschiedenes durchprobiert, aber sin positives Ergebnis. Und bevor Yo mich hier irgendwie verrenne, hoffe Yo muy en Eure hilfreichen Ideen. Hier veces el 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
declarar TapiHdl#,TapiHdl&,TapiNumDevs#,TapiCallBack#,TapiVer#,extID#,ghLine#,ghCall#
declarar TapiLineDevCaps#,LineCallParams#,TapiReturn&,TapiDevs&,ChooseDev&,DialNumber$
DialNumber$=123456 fiktive Telefonnummer
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 inicializar:
TapiReturn&=LineInit(TapiHdl#,%hInstance,TapiCallBack#,0,TapiNumDevs#)
TapiReturn&=LineInitEx(TapiHdl#,%hInstance,TapiCallBack#,0,TapiNumDevs#,TapiVer#,0)
imprimir LineInitEx +str$(TapiReturn&)
TapiHdl&=long(TapiHdl#,0)
TapiDevs&=long(TapiNumDevs#,0)
imprimir TapiNumDevs +str$(long(TapiNumDevs#,0))
todos Tapi-Devices abfragen a Modem gefunden...
ChooseDev&=0
whileloop TapiDevs&
ChooseDev& = &bucle - 1
lokal a verwendende API-Versión aushandeln:
TapiReturn&=LineNegotiateAPIVersion(TapiHdl&,ChooseDev&,$00020000,$00030000,TapiVer#,extID#)
imprimir NegotiateAPI +str$(TapiReturn&)
imprimir LocalAPI $000+hex$(long(TapiVer#,0))
if TapiReturn& = 0
Device-Parámetro abfragen:
TapiReturn&=LineGetDevCaps(TapiHdl&,ChooseDev&,long(TapiVer#,0),0,TapiLineDevCaps#)
imprimir GetDevCaps +str$(TapiReturn&)
imprimir dwBearerModes +str$(long(TapiLineDevCaps#,52))
imprimir dwMaxRate +str$(long(TapiLineDevCaps#,56))
imprimir dwMediaModes +str$(long(TapiLineDevCaps#,60))
if TapiReturn& = 0
si Modem gefunden...
ifnot (long(TapiLineDevCaps#,52)=1) and (long(TapiLineDevCaps#,56)>=9600) and (long(TapiLineDevCaps#,60)=16)
if (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)
imprimir LineOpen +str$(TapiReturn&)
if TapiReturn& = 0
TapiReturn&=LineSetStatusMessages(long(ghLine#,0),$2+$4+$8+$80+$100+$400+$40000,1)
imprimir SetStatusMessages +str$(TapiReturn&)
if TapiReturn& = 0
imprimir Anwahl de +DialNumber$+ con Gerät +str$(ChooseDev&)
clear ghCall#
TapiReturn&=LineMakeCall(long(ghLine#,0),ghCall#,addr(DialNumber$),0,LineCallParams#)
imprimir MakeCall +str$(TapiReturn&)
messagebox(Anwahl erfolgreich !,,0)
imprimir Anwahl erfolgreich !
caso TapiHdl& <> 0 : LineShutdown(TapiHdl&)
romper
endif
endif
caso TapiHdl& <> 0 : LineShutdown(TapiHdl&)
endif
endif
endif
endif
wend
disponer TapiHdl#
disponer TapiNumDevs#
disponer extID#
disponer ghLine#
disponer ghCall#
disponer TapiCallBack#
disponer TapiVer#
disponer TapiLineDevCaps#
disponer LineCallParams#
ENDPROC
cls
MakeTapiCall
waitinput
Matthias |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 23.01.2008 ▲ |
| |
| | | En beiden Profanversionen (Profano 7 ff. / 9.1sh) Choque a selber Punto?
Leider Yo kein tapifähiges Gerät en lo wirklich testen a puede...
PS: Codes no en pero en [CODE] |
| | | | |
| | Matthias Arlt | ¡Hola IF Sí, Choque a gleicher Punto. Mit el Diferencia, daß en Profano 7 el Verbindung a para Wegklicken el Fehlermeldung bestehen restos y en XProfan inmediatamente, also todavía während des Wahlvorgangs abbricht. Bin por lo tanto algo ratlos...
In CODE en lugar de en BOX: Sí, eigentlich klar. Yo habe momentan testweise una kleineren Monitor en Gebrauch con sólo 800x600. Como läßt el XProfan-Página algo schwierig handhaben. Und como passiert el ya veces... |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 23.01.2008 ▲ |
| |
| | | Könntest Usted veces un directorio c:p00x invertir y folgenden Code ausführen?
proc __xpse__endofprogram__
REM {{SOMEEXTRAENDCOMMAND}}
end
ENDPROC
DECLARE TAPIHDL#,TAPIHDL&,TAPINUMDEVS#,TAPICALLBACK#,TAPIVER#,EXTID#,GHLINE#,GHCALL#,TAPILINEDEVCAPS#,LINECALLPARAMS#,TAPIRETURN&,TAPIDEVS&,CHOOSEDEV&,DIALNUMBER$
declarar __gallog__%
__gallog__%=0
proc __log__
parámetros u$,s$
assign #89,C:P00X api.debug
append #89
imprimir #89,mkstr$(chr$(9),__gallog__%)+s$
close #89
volver 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) O (LONG(TAPILINEDEVCAPS#,56)>=9600) O (LONG(TAPILINEDEVCAPS#,60)=16) } /* LINE:49 {
IF (LONG(TAPILINEDEVCAPS#,52)=1) O (LONG(TAPILINEDEVCAPS#,56)>=9600) O (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$+* con Gerät *+STR$(CHOOSEDEV&)
PRINT Anwahl de +DIALNUMBER$+ con 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__
...y anschließend el c:p00xapi.debug hier puesto? |
| | | | |
| | Matthias Arlt | Schon hecho ! Debug-Expediente en el Anhang. |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 23.01.2008 ▲ |
| |
| | | El Messagebox Anwahl erfolgreich ! erscheint y restos a Usted esta schließt?
Unausreichende Bereichsdimensionierung oder una Callbackproblem - aber el es rein spekulativ. |
| | | | |
| | Matthias Arlt | Sí, el Messagebox restos a para Schließen. El Bereichsdimensionierung Tuve auch zuerst en Verdacht, habe aber ya probehalber el Werte vervielfacht. Leider no Änderung... |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 23.01.2008 ▲ |
| |
| | | lpfnCallback, Dritter Param lineInitializeEx debería una Largo ser, el Adresse uno Procedimiento welche con procAddr a beziehen es. Es No en el Fall - teste veces... |
| | | | |
| | Matthias Arlt | Das CallBack... Stimmt, el wäre o ne- Möglichkeit. Yo voluntad lo testen. Muß mich aber, lo que el Verwendung de CallBacks en Profano angeht, primero einlesen. Desde que vorwiegend Profano7 con bien funcionamiento y schnellen Workarrounds verwende y alles Übrige con Ensamblador-Dlls löse, bin Yo así eigtl. garnicht vertraut...
Und überhaupt: Übrigens primero Gracias IF, para Su Unterstützung. Yo muß ahora primero abbrechen. Morgen gehts más...
Matthias |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 23.01.2008 ▲ |
| |
| | Matthias Arlt | IF, Usted había bastante. Lo lag tatsächlich al CallBack. Ist ahora zwar con uno völlig leeren Procedimiento sólo una Art Dummy, pero funktioniert immerhin.
Gracias nochmals |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 24.01.2008 ▲ |
| |
| | | Gern.
[offtopic]@Roland: *erinner*procAddrStack* - entonces ginge auch korrekte wProc[/offtopic] |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 2 subscriber: |