TAPI Erste Gehversuche



  • Hallo Forum,

    Ich habe mal versucht etwas tiefer in das Thema WindowsAPI und TAPI einzusteigen.

    Erstes Ziel war ein Phone per Tapi zum wählen zu bewegen was mir auch gelungen ist:

    #include "stdafx.h"
    #include <iostream>
    #include "Tapi.h"
    #pragma comment(lib, "Tapi32.lib")
    
    int main(int argc, char* argv[])
    {
        long lResult = 0;
        HLINEAPP hLineApp = NULL;
        HLINE hLine = NULL;
        HCALL hCall = NULL;
        DWORD dwNumDevs = 0;
        DWORD dwApiVersion = 0x00020001;
    
        LINEINITIALIZEEXPARAMS lineInit;
    
        memset (&lineInit, 0 , sizeof(lineInit));
        lineInit.dwTotalSize = sizeof(lineInit);
        lineInit.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
    
        lResult = ::lineInitializeEx(&hLineApp,
                                    NULL,
                                    NULL,
                                    NULL,
                                    &dwNumDevs,
                                    &dwApiVersion,
                                    &lineInit);
    
        if(lResult != 0)
            std::cout << "Fehler!! " << std::endl;
        else
            std::cout << "Tapi initialize! " << "Line Devices On System: " << dwNumDevs << std::endl;
    
        lResult = ::lineOpen(hLineApp,
                           8,                           
                           &hLine,
                           dwApiVersion,               
                           0,                            
                           0,
                           LINECALLPRIVILEGE_NONE,
                           LINEMEDIAMODE_INTERACTIVEVOICE,
                           0);
    
        if(lResult != 0)
            std::cout << "Fehler!! " << std::endl;
        else
            std::cout << "Line Open! " << std::endl;
    
        lResult = ::lineMakeCall(hLine,
                                 &hCall,
                                    "+49xxxxxx",
                                    0,
                                    NULL);
    
        if(lResult < 0)
            std::cout << "Fehler!! " << std::endl;
        else
            std::cout << "Call! " << std::endl;
    
    }
    

    Funktioniert auch ohne Probleme.

    Im nächsten Schritt möchte ich ein wenig "anwenderfreundlich" werden.

    Jetzt hänge ich aber an zwei Stellen fest:

    Das wählen funktioniert nur dann wenn
    DWORD dwApiVersion = 0x00020001;
    richtig eingestellt ist. Kann man das irgendwie abfragen? Damit der Benutzer nicht noch die TAPI Version wissen und einstellen muss...

    Da sich ja oft mal (alleine schon durch den default vorhanden h323 TSP) mehrere RSPs auf dem System befinden, wäre es schön, wenn ich die TSP per Namen auflisten könnte um dann den richtigen auszuwählen.

    Ich bin hier schon über: lineGetDevCaps gestolpert. Bin ich hier richtig oder sollte ich das anders lösen. Wenn lineGetDevCaps mein Freund ist... Gibt's da ein gutverständliches BSP für mit der MSDN bin ich hier nicht wirklich weiter gekommen.

    Gruß,
    Marcus



  • Kann man das so umschreiben das man das auch in DEV C++ complieren kann ????

    Ich hab mal versucht dass in Virtual Studio 2008 als exe zu machen aber ich bekomm nur fehlermeldungen und ich finde das DEV C++ Besser

    Aber ich finde es cool das du eine Tapi function geschrieben hast

    😞 Leider konnte ich dir nicht helfen 😞


  • Mod

    1. Solltest Du Dir lineNegoatiateAPIVersion
    2. Schau Dir mal das Sample an
    http://msdn2.microsoft.com/en-us/library/ms811409.aspx
    3. Schau Dir mal ENUMTAPI an bzgl. lineGetDevCaps
    http://www.programmersheaven.com/download/2412/download.aspx
    Mit lineGetDevCpas bekommst Du den Namen der lines.



  • Vergiss DevC++; wird schon lange nicht mehr weiterentwickelt und Du hast immer Probleme mit aktuellen PSDK Funktionen...



  • TJA ICH BEKOMME FOLGENDE FEHLERMELDUNG wenn ich den code einfach in Virtual Studio 2008 einfüge

    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(11) : error C2065: 'HLINEAPP': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(11) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'hLineApp'
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(11) : error C2065: 'hLineApp': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(12) : error C2065: 'HLINE': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(12) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'hLine'
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(12) : error C2065: 'hLine': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(13) : error C2065: 'HCALL': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(13) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'hCall'
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(13) : error C2065: 'hCall': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(17) : error C2065: 'LINEINITIALIZEEXPARAMS': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(17) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'lineInit'
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(17) : error C2065: 'lineInit': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(19) : error C2065: 'lineInit': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(19) : error C2065: 'lineInit': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(19) : error C2070: ''unknown-type'': Ungültiger sizeof-Operand
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(20) : error C2065: 'lineInit': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(20) : error C2228: Links von ".dwTotalSize" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(20) : error C2065: 'lineInit': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(20) : error C2070: ''unknown-type'': Ungültiger sizeof-Operand
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(21) : error C2065: 'lineInit': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(21) : error C2228: Links von ".dwOptions" muss sich eine Klasse/Struktur/Union befinden.
    Typ ist ''unknown-type''
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(21) : error C2065: 'LINEINITIALIZEEXOPTION_USEEVENT': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(24) : error C2039: 'lineInitializeEx': Ist kein Element von 'global namespace'' c:\\dokumente und einstellungen\\patrick\\desktop\\tapi\\tapi\\tapi.cpp(24) : error C2065: 'hLineApp': nichtdeklarierter Bezeichner c:\\dokumente und einstellungen\\patrick\\desktop\\tapi\\tapi\\tapi.cpp(30) : error C2065: 'lineInit': nichtdeklarierter Bezeichner c:\\dokumente und einstellungen\\patrick\\desktop\\tapi\\tapi\\tapi.cpp(24) : error C3861: "lineInitializeEx": Bezeichner wurde nicht gefunden. c:\\dokumente und einstellungen\\patrick\\desktop\\tapi\\tapi\\tapi.cpp(38) : error C2039: 'lineOpen': Ist kein Element von 'global namespace''
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(38) : error C2065: 'hLineApp': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(40) : error C2065: 'hLine': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(44) : error C2065: 'LINECALLPRIVILEGE_NONE': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(45) : error C2065: 'LINEMEDIAMODE_INTERACTIVEVOICE': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(38) : error C3861: "lineOpen": Bezeichner wurde nicht gefunden.
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(53) : error C2039: 'lineMakeCall': Ist kein Element von '`global namespace''
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(53) : error C2065: 'hLine': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(54) : error C2065: 'hCall': nichtdeklarierter Bezeichner
    c:\dokumente und einstellungen\patrick\desktop\tapi\tapi\tapi.cpp(53) : error C3861: "lineMakeCall": Bezeichner wurde nicht gefunden. 😡 😡 😡


  • Mod

    #include <tapi.h>
    

    vergessen?



  • ja ich hab ja extra nochmal eine ausen net geladen aber dann bekomm ich imemr die fehlermeldung von :

    'LINEINITIALIZEEXPARAMS':
    'lineInit'
    'lineInit':
    ...


  • Mod

    Was für Fehlermeldungen hast Du?
    Ein korrekte SDK-Instalation ist Vorraussetzung!

    Was Du hier aufzählst sind nur Indentifier...



  • Hi,

    erstmal vielen Dank für die Tipps. Wenn ich mich da durchgebissen habe, werde ich mich bestimmt nochmal melden "müssen"

    Danke......

    Gruß,
    Marcus



  • so ich bin bis heute noch nicht schlauer aus diesen code geworden 😞

    welcher complirer benutzt man für diesen code und kann ich das einfach rüberkopieren oder muss ich da IRGENTWAS beachten ???

    🙄

    DEV C++ kompliert das nicht
    Code::Blocks auch nicht
    Microsoft Virtual C++ auch nicht

    WIE KANN ICH DEN CODE BENUTZEN 😕 🙄 😞


  • Mod

    Welchen MS Compiler benutzt?
    Ich sehe keinen Grund warum Code aus diesem Thread nicht compiliert werden könnte, wenn das SDK installiert ist.

    Welchen Code meinst Du? Meine Samples oder den Code des OP?



  • mom benutze ich wieder dev c++ ich weis der ist alt und so

    aber ich habe mir die 2008ter version runtergeladen von microsoft

    und welchen code ich testen will ?

    den ganz oberen


  • Mod

    Der müste mit dem aktuellen SDK kompilieren.



  • Hallo,

    Da bin ich mal wieder 🙂

    Ich habe zwischenzeitlich mal versucht die Infos und FAQs die es zum Thema Tapi und C++ gibt zu "verarbeiten". Bin dabei auch auf das AW Buch Windows Telephony Programming von Chris Sells gestossen und somit auch auf das zugehörige "Framework" gestossen. Ich habe allerdings das Problem, dass ich die TFX2.0 lib weder unter 2005 noch unter 2008 kompiliert bekomme.

    Output:
    1>Compiling...
    1>TfxPhoneHelper.cpp
    1>..\TfxPhoneHelper.cpp(24) : error C2065: 'i' : undeclared identifier
    1>TfxLineHelper.cpp
    1>..\TfxLineHelper.cpp(24) : error C2065: 'i' : undeclared identifier

    Kennt/hat jemand die LIB am laufen. Ist die noch verwendbar oder kalter Kaffee. Ich denke das sie für TAPI 2.x Projekte doch problemlos nutzbar sein sollte.

    Bin wie immer für jeden Tip dankbar.

    Gruß,
    Marcus


  • Mod

    Das ist IMHO nur ein Problem mit dem For-Scope!

    Diese alte Bibliothek wurde mit VC6 gebaut.



  • ...

    Der Tip mit dem For Scope war ein 100%tiger Treffer. Danke!

    Habe mir erlaubt den Source umzubauen. Habe das int i auf der For Schleife rausgenommen und an den Anfang gesetzt. Nun läuft alles durch.

    Wie kann ich denn die Aussage alte Bibliothek verstehen? Enfach nur: "ist schon älter" oder schon so alt das man sie nicht mehr benutzen sollte? Gibt es Alternativen?

    Gruß,
    Marcus


  • Mod

    Verwenden kann man sie. Das ist schon OK, allerdings fand ich sie nie wirklich gut.
    Bei Tapi gibt es kein alt, denn sie ist selbst alt.
    Die Wurzeln gehen bis in die 1666bit Zeiten zurück und der Code, der für damals geschrieben wurde funktioniert in 99,9% der Fälle auch heute ohne Änderung.



  • Ok. Kann ich nachvollziehen.
    Ich muss trotzdem nochmal nachbohren 🙂 Wenn die TFX nicht so gut ist. (Was du mit Sicherheit besser beantworten kannst als ich) gibt es bessere Alternativen.

    Danke......

    Gruß,
    Marcus


  • Mod

    Meine Klassenbibliothek! 🕶
    Aber die ist nicht öffentlich...



  • Wo muss ich die "Bestechungs-Güter" hinsenden? 🙂


Anmelden zum Antworten