亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tapiutils.cpp

?? 串口的傳輸串口的傳輸串口的傳輸串口的傳輸
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//
// TAPIUTILS.CPP
//
// This module implements the CTapiConnection class.
//
#include "stdafx.h"
#include <string.h>
#include "TapiUtils.h"

// All TAPI line functions return 0 for SUCCESS, so define it.
#define SUCCESS 0

// TAPI version that this sample is designed to use.
#define SAMPLE_TAPI_VERSION 0x00010004

// Early TAPI version
#define EARLY_TAPI_VERSION 0x00010003

// Possible return error for resynchronization functions.
#define WAITERR_WAITABORTED  1

// A pointer to my class because TAPI needs a callback
CTapiConnection *MyThis;

#if FALSE
// Structures needed to handle special non-dialable characters.
#define g_sizeofNonDialable (sizeof(g_sNonDialable)/sizeof(g_sNonDialable[0]))

typedef struct {
    LONG lError;
    DWORD dwDevCapFlag;
    LPSTR szToken;
    LPSTR szMsg;
} NONDIALTOKENS;

NONDIALTOKENS g_sNonDialable[] = {
    {LINEERR_DIALBILLING,  LINEDEVCAPFLAGS_DIALBILLING,  "$", 
            "Wait for the credit card bong tone" },
    {LINEERR_DIALDIALTONE, LINEDEVCAPFLAGS_DIALDIALTONE, "W", 
            "Wait for the second dial tone" },
    {LINEERR_DIALDIALTONE, LINEDEVCAPFLAGS_DIALDIALTONE, "w", 
            "Wait for the second dial tone" },
    {LINEERR_DIALQUIET,    LINEDEVCAPFLAGS_DIALQUIET,    "@", 
            "Wait for the remote end to answer" },
    {LINEERR_DIALPROMPT,   0,                            "?", 
            "Press OK when you are ready to continue dialing"},
};
#endif

// 
// Constructor
//
CTapiConnection::CTapiConnection()
{
    m_bShuttingDown = FALSE;
    m_bStoppingCall = FALSE;
    m_bInitializing = FALSE;
    m_bTapiInUse = FALSE;
    m_dwNumDevs = 0;
    m_hCall = NULL;
    m_hLine = NULL;
    m_dwDeviceID = 0;
    m_hLineApp = NULL;

    MyThis = this;

};

//
// Destructor
//
CTapiConnection::~CTapiConnection()
{
    m_bInitialized = FALSE;
};

//
//  FUNCTION: BOOL Create()
//
//  PURPOSE: Initializes TAPI
//
BOOL CTapiConnection::Create(char *szPhoneNumber)
{
    long lReturn;

    // If we're already initialized, then initialization succeeds.
    if (m_hLineApp)
        return TRUE;

    // If we're in the middle of initializing, then fail, we're not done.
    if (m_bInitializing)
        return FALSE;

    m_bInitializing = TRUE;

    // Initialize TAPI
    do
    {
        lReturn = ::lineInitialize(&m_hLineApp, 
            AfxGetInstanceHandle(), 
            lineCallbackFunc, 
            "DialIt", 
            &m_dwNumDevs);

        if (m_dwNumDevs == 0)
        {
            AfxMessageBox("There are no telephony devices installed.");
            m_bInitializing = FALSE;
            return FALSE;
        }

        if (HandleLineErr(lReturn))
            continue;
        else
        {
            OutputDebugString("lineInitialize unhandled error\n");
            m_bInitializing = FALSE;
            return FALSE;
        }
    }
    while(lReturn != SUCCESS);

    OutputDebugString("Tapi initialized.\n");

    // If the user furnished a phone number copy it over.
    if (szPhoneNumber)
        strcpy(m_szPhoneNumber, szPhoneNumber);

    m_bInitializing = FALSE;
    return TRUE;
}

//
//  FUNCTION: DialCall()
//
//  PURPOSE: Get a number from the user and dial it.
//
BOOL CTapiConnection::DialCall(char *szPhoneNumber)
{
    long lReturn;
    LPLINEDEVCAPS lpLineDevCaps = NULL;

    if (m_bTapiInUse)
    {
        AfxMessageBox("A call is already being handled.");
        return FALSE;
    }

    // Make sure TAPI is initialized properly
    if (!m_hLineApp)
    {
        if (!Create(NULL))
            return FALSE;
    }

    // If there are no line devices installed on the machine, quit.
    if (m_dwNumDevs < 1)
        return FALSE;

    // We now have a call active.  Prevent future calls.
    m_bTapiInUse = TRUE;

    // Get a phone number from the user.
    if (szPhoneNumber == (char *)NULL)
    {
        if (m_szPhoneNumber == (char *)NULL)
        {
            HangupCall();
            goto DeleteBuffers;
        }
    }
    else 
        strcpy(m_szPhoneNumber, szPhoneNumber);

    // Get the line to use
    lpLineDevCaps = GetDeviceLine(&m_dwAPIVersion, lpLineDevCaps);

    // Need to check the DevCaps to make sure this line is usable.
    if (lpLineDevCaps == NULL)
    {
        OutputDebugString("Error on Requested line\n");
        goto DeleteBuffers;
    }

    if (!(lpLineDevCaps->dwBearerModes & LINEBEARERMODE_VOICE ))
    {
        AfxMessageBox("The selected line doesn't support VOICE capabilities");
        goto DeleteBuffers;
    }

    // Does this line have the capability to make calls?
    if (!(lpLineDevCaps->dwLineFeatures & LINEFEATURE_MAKECALL))
    {
        AfxMessageBox("The selected line doesn't support MAKECALL capabilities");
        goto DeleteBuffers;
    }

    // Does this line have the capability for interactive voice?
    if (!(lpLineDevCaps->dwMediaModes & LINEMEDIAMODE_INTERACTIVEVOICE))
    {
        AfxMessageBox("The selected line doesn't support INTERACTIVE VOICE capabilities");
        goto DeleteBuffers;
    }

    // Open the Line for an outgoing call.
    do
    {
        lReturn = ::lineOpen(m_hLineApp, m_dwDeviceID, &m_hLine,
            m_dwAPIVersion, 0, 0,
            LINECALLPRIVILEGE_NONE, 0, 0);

        if((lReturn == LINEERR_ALLOCATED)||(lReturn == LINEERR_RESOURCEUNAVAIL))
        {
            HangupCall();
            OutputDebugString("Line is already in use by a non-TAPI application "
                "or by another TAPI Service Provider.\n");
            goto DeleteBuffers;
        }

        if (HandleLineErr(lReturn))
            continue;
        else
        {
            OutputDebugString("Unable to Use Line\n");
            HangupCall();
            goto DeleteBuffers;
        }
    }
    while(lReturn != SUCCESS);

    // Start dialing the number
    if( MakeTheCall(lpLineDevCaps, m_szPhoneNumber))
        OutputDebugString("lineMakeCall succeeded.\n");
    else
    {
        OutputDebugString("lineMakeCall failed.\n");
        HangupCall();
    }

DeleteBuffers:

    if (lpLineDevCaps)
        LocalFree(lpLineDevCaps);

    return m_bTapiInUse;
}

//
//  FUNCTION: void GetDeviceLine()
//
//  PURPOSE: Gets the first available line device.
//
//
LPLINEDEVCAPS CTapiConnection::GetDeviceLine(DWORD *pdwAPIVersion, LPLINEDEVCAPS lpLineDevCaps)
{
    DWORD dwDeviceID;
    char szLineUnavail[] = "Line Unavailable";
    char szLineUnnamed[] = "Line Unnamed";
    char szLineNameEmpty[] = "Line Name is Empty";
    LPSTR lpszLineName;
    long lReturn;
    char buf[MAX_PATH];
    LINEEXTENSIONID lineExtID;
    BOOL bDone = FALSE;

    for (dwDeviceID = 0; (dwDeviceID < m_dwNumDevs) && !bDone; dwDeviceID ++)
    {

        lReturn = ::lineNegotiateAPIVersion(m_hLineApp, dwDeviceID, 
            EARLY_TAPI_VERSION, SAMPLE_TAPI_VERSION,
            pdwAPIVersion, &lineExtID);

        if ((HandleLineErr(lReturn))&&(*pdwAPIVersion))
        {
            lpLineDevCaps = MylineGetDevCaps(lpLineDevCaps, dwDeviceID, *pdwAPIVersion);

            if ((lpLineDevCaps -> dwLineNameSize) &&
                (lpLineDevCaps -> dwLineNameOffset) &&
                (lpLineDevCaps -> dwStringFormat == STRINGFORMAT_ASCII))
            {
                // This is the name of the device.
                lpszLineName = ((char *) lpLineDevCaps) + 
                    lpLineDevCaps -> dwLineNameOffset;
                sprintf(buf, "Name of device is: %s\n", lpszLineName);
                OutputDebugString(buf);

            }
            else  // DevCaps doesn't have a valid line name.  Unnamed.
                lpszLineName = szLineUnnamed;
        }
        else  // Couldn't NegotiateAPIVersion.  Line is unavail.
            lpszLineName = szLineUnavail;

        // If this line is usable and we don't have a default initial
        // line yet, make this the initial line.
        if ((lpszLineName != szLineUnavail) && 
            (lReturn == SUCCESS )) 
        {          
            m_dwDeviceID = dwDeviceID;
            bDone = TRUE;
        }
        else 
            m_dwDeviceID = MAXDWORD;
    }
    return (lpLineDevCaps);
}

//
//  FUNCTION: MylineGetDevCaps(LPLINEDEVCAPS, DWORD , DWORD)
//
//  PURPOSE: Gets a LINEDEVCAPS structure for the specified line.
//
//  COMMENTS:
//
//    This function is a wrapper around lineGetDevCaps to make it easy
//    to handle the variable sized structure and any errors received.
//    
//    The returned structure has been allocated with LocalAlloc,
//    so LocalFree has to be called on it when you're finished with it,
//    or there will be a memory leak.
//
//    Similarly, if a lpLineDevCaps structure is passed in, it *must*
//    have been allocated with LocalAlloc and it could potentially be 
//    LocalFree()d.
//
//    If lpLineDevCaps == NULL, then a new structure is allocated.  It is
//    normal to pass in NULL for this parameter unless you want to use a 
//    lpLineDevCaps that has been returned by a previous I_lineGetDevCaps
//    call.
//
//

LPLINEDEVCAPS CTapiConnection::MylineGetDevCaps(
    LPLINEDEVCAPS lpLineDevCaps,
    DWORD dwDeviceID, DWORD dwAPIVersion)
{
    // Allocate enough space for the structure plus 1024.
    size_t sizeofLineDevCaps = sizeof(LINEDEVCAPS) + 1024;
    long lReturn;
    
    // Continue this loop until the structure is big enough.
    while(TRUE)
    {
        // Make sure the buffer exists, is valid and big enough.
        lpLineDevCaps = 
            (LPLINEDEVCAPS) CheckAndReAllocBuffer(
                (LPVOID) lpLineDevCaps, // Pointer to existing buffer, if any
                sizeofLineDevCaps);      // Minimum size the buffer should be

        if (lpLineDevCaps == NULL)
            return NULL;

        // Make the call to fill the structure.
        do
        {            

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久晋中 | 精品一区二区久久久| 欧美视频一区二区三区在线观看 | 日本不卡一二三区黄网| 欧美日本在线观看| 久久精品国产在热久久| 精品美女一区二区| 国产高清一区日本| 亚洲欧洲日产国码二区| 在线精品视频免费播放| 日韩高清不卡在线| 久久久久国产成人精品亚洲午夜 | 精品一区二区三区不卡| 国产亚洲欧美一区在线观看| av毛片久久久久**hd| 夜夜嗨av一区二区三区中文字幕| 欧美视频一区二区在线观看| 久久精品免费看| 久久久美女毛片| 在线观看日韩毛片| 精品亚洲免费视频| 亚洲品质自拍视频网站| 7777精品伊人久久久大香线蕉| 国内精品写真在线观看| 亚洲免费观看高清完整版在线观看 | 成人免费毛片高清视频| 亚洲黄色性网站| 欧美大片国产精品| 日本久久电影网| 久久99久久精品| 亚洲欧美日韩中文字幕一区二区三区| 制服丝袜在线91| 高清视频一区二区| 日本在线观看不卡视频| 国产精品久久久久久久第一福利 | 国产日韩欧美精品一区| 色婷婷久久久综合中文字幕| 久久国产三级精品| 亚洲精品中文在线影院| 久久久久久久精| 欧美色老头old∨ideo| 国产寡妇亲子伦一区二区| 亚洲成年人影院| 中文字幕第一区| 欧美videos大乳护士334| 欧美午夜片在线观看| 国产高清不卡一区| 首页国产丝袜综合| 亚洲免费av在线| 中国av一区二区三区| 精品电影一区二区| 欧美高清激情brazzers| 99热在这里有精品免费| 国内偷窥港台综合视频在线播放| 亚洲成人免费看| 亚洲摸摸操操av| 欧美国产日韩一二三区| 日韩一区二区电影| 欧美中文字幕一区二区三区| 国产91在线看| 九色综合狠狠综合久久| 日本欧美在线看| 亚洲高清一区二区三区| 亚洲精品视频自拍| 国产精品久久毛片| 中文字幕精品一区二区三区精品| 欧美不卡一区二区| 日韩精品一区二区三区老鸭窝| 欧美日韩精品一区二区| 欧美色图免费看| 91福利在线播放| 日本久久一区二区三区| 色激情天天射综合网| 一本色道**综合亚洲精品蜜桃冫| 成人激情小说网站| 波多野结衣的一区二区三区| 不卡一二三区首页| av在线播放不卡| 99精品欧美一区二区三区小说 | 欧美一区二区人人喊爽| 欧美美女网站色| 欧美日韩mp4| 91精品欧美福利在线观看| 7878成人国产在线观看| 欧美日韩aaaaa| 91麻豆精品国产91| 日韩精品中文字幕一区| 精品国产三级a在线观看| 久久精品人人做人人综合| 欧美国产视频在线| 亚洲免费视频成人| 秋霞成人午夜伦在线观看| 麻豆成人在线观看| 国产91精品精华液一区二区三区| 成人午夜精品在线| 色婷婷香蕉在线一区二区| 欧美日韩国产首页| 日韩欧美在线影院| 久久精品视频一区二区| 日韩美女啊v在线免费观看| 一区二区三区毛片| 麻豆久久一区二区| 成人激情图片网| 日本高清不卡在线观看| 91精品国产色综合久久| 欧美精品一区二区三区一线天视频 | 国产精品久久国产精麻豆99网站| 亚洲精品中文在线| 老司机精品视频在线| 成人网在线播放| 欧美日高清视频| 国产亚洲欧洲一区高清在线观看| 亚洲另类色综合网站| 日本中文在线一区| 99精品视频在线观看免费| 这里只有精品免费| 国产亚洲综合色| 夜夜精品视频一区二区| 国产又粗又猛又爽又黄91精品| av在线这里只有精品| 在线不卡中文字幕播放| 国产日韩欧美精品电影三级在线| 亚洲综合丝袜美腿| 国产v综合v亚洲欧| 这里只有精品视频在线观看| 国产精品传媒视频| 激情五月婷婷综合网| 色吧成人激情小说| 欧美国产精品劲爆| 热久久国产精品| 色94色欧美sute亚洲线路一ni| 精品黑人一区二区三区久久 | 国产成人欧美日韩在线电影| 4438成人网| 亚洲视频小说图片| 国产麻豆精品久久一二三| 欧美日韩高清一区二区| 亚洲天堂2014| 国产成人一区二区精品非洲| 欧美欧美午夜aⅴ在线观看| 国产精品久久二区二区| 精品一区二区三区的国产在线播放| 欧美性xxxxxxxx| 中文字幕日韩一区| 亚洲自拍偷拍图区| 白白色 亚洲乱淫| 国产亚洲精品bt天堂精选| 日韩成人精品在线| 欧美日本视频在线| 亚洲一区在线观看免费| 91小宝寻花一区二区三区| 欧美国产激情一区二区三区蜜月| 美女国产一区二区| 777亚洲妇女| 天天综合网 天天综合色| 欧美优质美女网站| 悠悠色在线精品| 91猫先生在线| 亚洲天堂免费在线观看视频| 国产成人免费xxxxxxxx| 久久久久久一二三区| 九九精品一区二区| 精品999久久久| 狠狠色综合日日| 精品剧情v国产在线观看在线| 麻豆国产精品777777在线| 在线播放中文字幕一区| 天堂av在线一区| 欧美一区二区三区免费观看视频 | 国产精品综合久久| 久久综合狠狠综合| 国产资源精品在线观看| 精品美女被调教视频大全网站| 久久99精品久久久久久国产越南 | 欧美精品一区二| 精品一区二区三区香蕉蜜桃| 欧美精品一区二区三区蜜桃 | 亚洲男同性恋视频| 在线亚洲高清视频| 亚洲国产综合视频在线观看| 欧美三级一区二区| 日本欧美大码aⅴ在线播放| 日韩欧美一二三区| 国产精品乡下勾搭老头1| 国产精品久久久久久久久久久免费看 | 久久99国产精品麻豆| 国产日韩av一区| 91在线视频网址| 日韩精品福利网| 久久亚洲综合色一区二区三区| 国产盗摄精品一区二区三区在线| 国产精品毛片大码女人| 欧美在线一区二区| 日本不卡一区二区三区| 精品国产一区二区精华| av一区二区久久| 日韩国产一二三区| 久久精品人人爽人人爽| 欧美性videosxxxxx| 国模冰冰炮一区二区|