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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tapiutils.cpp

?? 串口的傳輸串口的傳輸串口的傳輸串口的傳輸
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
//
// 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
        {            

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费观看| 欧美一区二区啪啪| 中文字幕不卡三区| 福利电影一区二区三区| 亚洲国产高清不卡| 一本色道久久综合狠狠躁的推荐| 中文字幕一区二区三区四区| av成人动漫在线观看| 亚洲欧美成aⅴ人在线观看| 色噜噜偷拍精品综合在线| 亚洲久草在线视频| 欧美人妇做爰xxxⅹ性高电影| 舔着乳尖日韩一区| 精品电影一区二区三区| 国产精品中文有码| 中文字幕一区二区三区在线不卡| 欧美性xxxxxxxx| 日本色综合中文字幕| 精品免费99久久| 成人美女视频在线看| 一区二区三区视频在线观看| 欧美剧在线免费观看网站 | 99久久99久久精品免费观看| 一区二区理论电影在线观看| 91麻豆精品国产91久久久使用方法| 美女脱光内衣内裤视频久久影院| 国产无人区一区二区三区| 91免费版在线看| 奇米色777欧美一区二区| 久久精品夜夜夜夜久久| 欧美亚洲综合色| 激情综合色综合久久综合| 中文字幕亚洲精品在线观看| 717成人午夜免费福利电影| 国产精品66部| 亚洲成人av一区二区三区| 国产日韩影视精品| 欧美日韩成人激情| 大陆成人av片| 精品午夜久久福利影院 | aaa欧美大片| 午夜视频一区在线观看| 国产精品日韩成人| 欧美视频一区二区三区| 国产在线精品免费| 亚洲高清免费观看| 欧美激情在线一区二区三区| 日本韩国欧美三级| 成人免费黄色大片| 麻豆精品国产传媒mv男同| 亚洲免费在线看| 日本一区免费视频| 日韩一区二区电影在线| 91精品1区2区| 成人毛片在线观看| 国产精品自拍毛片| 免播放器亚洲一区| 亚洲国产精品一区二区www在线| 国产精品久久久一区麻豆最新章节| 91精品国产综合久久福利| 在线观看视频一区| 99久久婷婷国产精品综合| 国产精品白丝jk黑袜喷水| 首页亚洲欧美制服丝腿| 亚洲aⅴ怡春院| 亚洲国产你懂的| 一区二区三区四区高清精品免费观看| 国产日韩欧美精品电影三级在线| 日韩区在线观看| 欧美一级理论片| 欧美精品丝袜中出| 欧美在线综合视频| 欧美视频在线一区| 欧美日韩视频不卡| 欧美日韩久久不卡| 欧美日本精品一区二区三区| 欧美日韩一区高清| 欧美体内she精高潮| 日本道在线观看一区二区| 99这里只有久久精品视频| 成人激情动漫在线观看| 成人性视频免费网站| 国产一区二区久久| 国产精品91一区二区| 丁香激情综合国产| av在线不卡免费看| 91在线云播放| 欧美亚洲动漫精品| 欧美高清视频在线高清观看mv色露露十八 | 国产精品白丝在线| 国产精品初高中害羞小美女文| 亚洲欧美综合色| 亚洲一区二区三区视频在线播放 | 亚洲人成小说网站色在线| 亚洲同性gay激情无套| 亚洲精品国产高清久久伦理二区| 一区二区三区四区在线播放| 午夜久久电影网| 久久精品国产一区二区三区免费看 | 日韩欧美国产一二三区| 精品国产乱码久久久久久影片| 久久理论电影网| 一色屋精品亚洲香蕉网站| 一区二区三区精密机械公司| 天堂久久一区二区三区| 美女视频黄久久| 国产91对白在线观看九色| 91视频免费播放| 欧美撒尿777hd撒尿| 精品奇米国产一区二区三区| 久久精品视频免费观看| 亚洲品质自拍视频| 日日摸夜夜添夜夜添精品视频| 狂野欧美性猛交blacked| 国产成人精品亚洲日本在线桃色 | 国产欧美日产一区| 日韩美女视频19| 看电视剧不卡顿的网站| 成人免费视频app| 欧美三级中文字幕| 久久久久久久久蜜桃| 国产精品乱子久久久久| 亚洲综合色区另类av| 日韩国产高清在线| 成人va在线观看| 538在线一区二区精品国产| 久久色视频免费观看| 亚洲综合视频在线| 国内精品视频666| 欧美视频一区二区在线观看| 国产亚洲午夜高清国产拍精品 | 国产98色在线|日韩| 欧美三级资源在线| 国产精品福利影院| 久久爱www久久做| 91久久精品一区二区| 久久久一区二区三区| 亚洲第一激情av| 成人妖精视频yjsp地址| 日韩女优视频免费观看| 日韩久久一区二区| 国产盗摄精品一区二区三区在线| 欧美精品在线一区二区| 亚洲欧美另类图片小说| 国产麻豆欧美日韩一区| 欧美一区日韩一区| 亚洲日本成人在线观看| 丁香天五香天堂综合| 欧美成人女星排名| 婷婷开心久久网| 一本一道波多野结衣一区二区| 国产精品欧美一区喷水| 激情综合一区二区三区| 欧美一区二区三区在线观看| 亚洲va韩国va欧美va| 欧美无砖砖区免费| 亚洲乱码国产乱码精品精小说| 国产成人亚洲精品狼色在线 | 久久精品人人做人人综合| 韩国v欧美v亚洲v日本v| 欧美一区二区免费| 日产欧产美韩系列久久99| 欧美精品 日韩| 日韩国产一区二| 欧美性色黄大片| 亚洲一区二区在线免费观看视频| 99久久久久久| 亚洲美女淫视频| 97aⅴ精品视频一二三区| 国产精品不卡视频| 9人人澡人人爽人人精品| 国产精品久久久久影院| 成人av网在线| 日韩美女视频一区| 色综合激情久久| 亚洲综合久久久久| 欧美日本在线播放| 首页亚洲欧美制服丝腿| 日韩欧美一区电影| 精品一区二区三区不卡| 国产亚洲欧洲997久久综合 | 亚洲成人午夜电影| 欧美男同性恋视频网站| 日本欧美一区二区三区乱码 | 国产麻豆91精品| 日本一区二区在线不卡| bt欧美亚洲午夜电影天堂| 亚洲人成在线播放网站岛国| 色欧美日韩亚洲| 天堂蜜桃91精品| 久久久久久麻豆| 99久久国产综合精品麻豆| 亚洲国产精品人人做人人爽| 在线播放欧美女士性生活| 精品一区二区三区免费观看| 欧美国产综合色视频| 欧美亚洲另类激情小说| 蜜臂av日日欢夜夜爽一区| 久久久久青草大香线综合精品| av网站免费线看精品|