Entwickler-Ecke
Windows API - Capi PUT_MESSAGE
Peter18 - Mo 14.04.14 15:06
Titel: Capi PUT_MESSAGE
Ein freundliches Hallo an alle,
nach Schwierigkeiten mit der Tapi versuche ich zunächst mal einen Weg über die Capi zu finden, vielleicht bringt das ja neue Ideen. Nach Lektüre der CAPI-Beschreibung, ersten Programmierversuchen und Internetsuche mußte ich feststellen, dass viele Links auf Infos zu CAPI auf nicht mehr existierende Seiten zeigen. Ich hoffe es hat vielleicht noch jemand ein paar Infos oder gar Programmschnipsel, die mir weiter helfen können.
Da ich die "Capi2032.dll" nicht importieren konnte habe ich die Schnittstelle und Daten per Deklaration beschrieben. Bei meinen Versuchen erscheinen Fehlercodierungen, die ich nirgens finden konnte. Kann sein das ich irgend eine Datenbeschreibung falsch interpretiert habe. Jedenfalls stehe ich nach diversen Versuchen im Nebel. Ich hoffe jemand mach etwas Wind.
Die Daten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Type Connect_Req = Record Command : Byte ; Subcommand : Byte ; Controller : Longword; CIP : Word ; CalledNumberTyp : Byte ; CalledNumber : PChar ; CallingNumberTyp : Byte ; CallingNumberTyp1 : Byte ; CallingNumber : PChar ; CalledSubTyp : Byte ; CalledSub : PChar ; CallingSubTyp : Byte ; CallingSub : Byte ; BProt : Word ; BC : Byte ; LLC : Byte ; HLC : Byte ; AdditionalInfo : Byte ; end; |
Die Methoden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Function CAPI_REGISTER ( D_MessageBuffersize : Integer; D_maxLogicalConnection : Integer; D_maxBDataBlocks : Integer; D_maxBDataLen : Integer; Var D_AppID : Integer ): Integer; stdcall; external 'Capi2032.dll'; Function CAPI_RELEASE ( D_AppID : Longint ): Longint; stdcall; external 'Capi2032.dll'; Function CAPI_WAIT_FOR_SIGNAL( D_AppID : Longint ): Longint; stdcall; external 'Capi2032.dll'; Function CAPI_PUT_MESSAGE ( D_AppID : Longint; pcapimessage : Pointer ): Longint; stdcall; external 'Capi2032.dll'; Function CAPI_GET_MESSAGE ( D_AppID : Longint; Var lpCapiBuffer : Longint ): Longint; stdcall; external 'Capi2032.dll'; |
Put Message:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| ConRq.Command := CAPI_CONNECT; ConRq.Subcommand := CAPI_REQ; ConRq.Controller := $1; ConRq.CIP := 1; ConRq.CalledNumberTyp := $80; ConRq.CalledNumber := PChar( Edit1.Text ); ConRq.CalledSubTyp := $80; ConRq.CallingSub := $0; ConRq.CallingNumberTyp := $0; ConRq.CallingNumberTyp1 := $80; ConRq.CallingNumber := PChar( Edit2.Text ); ConRq.CalledSubTyp := $80; ConRq.CalledSub := $0; ConRq.BProt := $1; ConRq.BC := $04; ConRq.LLC := $0; ConRq.HLC := $0; ConRq.AdditionalInfo := $0;
Res := CAPI_PUT_MESSAGE( AppID, @ConRq ); |
"CAPI_REGISTER" funktioniert und liefert eine ID. Nach Aufruf von "CAPI_PUT_MESSAGE" hat "
Res" den Wert '4360' oder '$1108'. Ich vermute das entweder die Datenstruktur nicht stimmt oder Parameter falsch sind. Da ich den Fehlercode aber nirgens finde hoffe ich, dass jemand den Fehler sieht oder sogar etwas hat, das funktioniert.
Grüße von der nicht mehr verregneten Nordsee
Peter
baumina - Mo 14.04.14 15:20
Soviel ich weiß, ist CAPI für ISDN-Karten und sicherlich nicht mehr viel im Gebrauch. Telefonanlagen oder moderne Telefone stellen eine TAPI-Schnittstelle zur Verfügung, die Du dann auch nutzen solltest. Alte Modems steuer ich auch mit TAPI an.
Mit TAPI hab ich mich schon tagelang rumgeschlagen, da es ganz wichtig ist mit welcher TAPI-Version die TAPI-Treiber angesteuert werden können.
Peter18 - Mo 14.04.14 15:45
Hallo baumina,
danke für Deine Antwort! Hatte eigentlich auch an die Tapi gedacht, als universellere Schnittstelle. Dort habe ich aber das Problem, dass nicht alle Methoden verfügbar sind. Vielleicht hängt das auch damit zusammen, das mein Entwicklungsrechner außer einem Modem nichts zu bieten hat. Ich kann zwar mit dem Modem wählen, aber Geräteauflistungen und Callcenterfunktionen sind nicht erreichbar. Entwerder muß ich manuell noch ein "Create" einbauen oder über Dispatch gehen. Doch auf dem Weg bin ich noch nicht sehr weit gekommen, da fehlen mir die Infos.
Das bietet mir die "TAPI3Lib_TLB":
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| class function CoTAPI.Create: ITTAPI; begin Result := CreateComObject(CLASS_TAPI) as ITTAPI; end;
class function CoTAPI.CreateRemote(const MachineName: string): ITTAPI; begin Result := CreateRemoteComObject(MachineName, CLASS_TAPI) as ITTAPI; end;
class function CoDispatchMapper.Create: ITDispatchMapper; begin Result := CreateComObject(CLASS_DispatchMapper) as ITDispatchMapper; end;
class function CoDispatchMapper.CreateRemote(const MachineName: string): ITDispatchMapper; begin Result := CreateRemoteComObject(MachineName, CLASS_DispatchMapper) as ITDispatchMapper; end;
class function CoRequestMakeCall.Create: ITRequest; begin Result := CreateComObject(CLASS_RequestMakeCall) as ITRequest; end;
class function CoRequestMakeCall.CreateRemote(const MachineName: string): ITRequest; begin Result := CreateRemoteComObject(MachineName, CLASS_RequestMakeCall) as ITRequest; end; |
Wenn Du etwas hast, womit man anfangen kann währ das schön.
Grüße von der Nordsee
Peter
baumina - Mo 14.04.14 15:49
Mein Uralt-Modem kann auch nur rauswählen.
Peter18 - Mo 14.04.14 15:57
Hallo baumina,
meins kann zwar auch Fax, aber anscheinend fehlen die Treiber. Das Problem ist: Wie komme ich an die Tapi-Methoden?
Grüße von der Nordsee
Peter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!