не могу разобраться по MSDN в TAPI (телефония, кто знает). мне нужно написать программу- диалоговое окно на котором одна всего кнопка- "Позвонить" называеться. когда я нажимаю эту кнопку модем должен набирать номер телефона с которым я хочу поговорить, и когда будут слышны длинные гудки я снимаю трубку реального телефона и разговариваю, а точнее жду когда ответят на мои длинные гудки- вызов, и начинаю разговор. как это реализовать? кто- то вобще шарит? пожалуйста подскажите. в интернете нашел какой- то код по этому вопросу- он у меня не работает.
| Код | void CPhoneDlg::OnButton1() { // TODO: Add your control notification handler code here // Initialize COM CoInitializeEx( NULL, COINIT_MULTITHREADED );
// Create a TAPI entry point object. ITTAPI *gpTapi; CoCreateInstance( CLSID_TAPI, NULL, CLSCTX_INPROC_SERVER, IID_ITTAPI, (LPVOID *)&gpTapi );
// Initialize TAPI gpTapi->Initialize();
HRESULT hr; ITAddress *pAddress = NULL; ITBasicCallControl *pBasicCall = NULL; IEnumAddress *pIEnumAddress = NULL;
gpTapi->_EnumerateAddresses(&pIEnumAddress); //DWORD dwAddressType = LINEADDRESSTYPE_PHONENUMBER; //unsigned short * dwMediaType = TAPIMEDIATYPE_DATAMODEM; OLECHAR wAddressCall [5]; CString strTemp; strTemp="41615"; MultiByteToWideChar(CP_ACP, 0, (LPCTSTR) strTemp, -1, &wAddressCall[0], 5);
ITMediaSupport *pMediaSupport = NULL; VARIANT_BOOL bSupport;// = FALSE; bool isSuccessAddress = false; BSTR bstrAddressToCall = SysAllocString(&wAddressCall[0]);
while(S_OK == pIEnumAddress->Next(1, &pAddress, NULL) ) { hr = pAddress->QueryInterface(IID_ITMediaSupport, (void **)&pMediaSupport); if(hr == S_OK) { //hr = pMediaSupport->QueryMediaType(dwMediaType, &bSupport); //ошибка в следующей строке. ошибка времени исполнения "Acces violation" hr = pMediaSupport->QueryMediaType(TAPIMEDIATYPE_String_DataModem, &bSupport); if(bSupport) { hr = pAddress->CreateCall(bstrAddressToCall, &pBasicCall); if(hr == S_OK) { isSuccessAddress = true; break; } } } }
hr = pBasicCall->Connect(FALSE); /* if(isSuccessAddress) { HANDLE hCurrentProcess = GetCurrentProcess(); for(int i=0; i<iCount; ++i) { hr = pBasicCall->Connect(FALSE); if(m_isHangup) { pBasicCall->Disconnect(DC_NORMAL); break; } WaitForInputIdle(hCurrentProcess, iInterval); } } */ }
|
|