Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mo 14.04.14 15:06 
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:
ausblenden 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:
ausblenden 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; stdcallexternal 'Capi2032.dll';
  Function  CAPI_RELEASE        (     D_AppID                : Longint    ): Longint; stdcallexternal 'Capi2032.dll';
  Function  CAPI_WAIT_FOR_SIGNAL(     D_AppID                : Longint    ): Longint; stdcallexternal 'Capi2032.dll';
  Function  CAPI_PUT_MESSAGE    (     D_AppID                : Longint;
                                      pcapimessage           : Pointer    ): Longint; stdcallexternal 'Capi2032.dll';
  Function  CAPI_GET_MESSAGE    (     D_AppID                : Longint;
                                  Var lpCapiBuffer           : Longint    ): Longint; stdcallexternal 'Capi2032.dll';

Put Message:
ausblenden 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;      // Speech    ?? analog = 4
  ConRq.CalledNumberTyp   := $80;    // Default
  ConRq.CalledNumber      := PChar( Edit1.Text );
  ConRq.CalledSubTyp      := $80;    // Default
  ConRq.CallingSub        := $0;     // Text wer ruft ??
  ConRq.CallingNumberTyp  := $0;     // Default
  ConRq.CallingNumberTyp1 := $80;    // $80 Nummer senden, $A0 nicht senden
  ConRq.CallingNumber     := PChar( Edit2.Text );
  ConRq.CalledSubTyp      := $80;    // Default $50 ==> X.213
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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":
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Mo 14.04.14 15:49 
Mein Uralt-Modem kann auch nur rauswählen.

Für diesen Beitrag haben gedankt: Peter18
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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