Приветствую...
Такой вот вопрос возник.
Делаю m_pDPClient->Connect(... Но требуется соединяться без выбрасывания окошка на экран, дескать, чтобы не было вопросов через какую железяку и по какому номеру соединяться...
Вот что имеется на данный момент:
//===============================
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_DirectPlay8Client, NULL,
CLSCTX_INPROC_SERVER, IID_IDirectPlay8Client,
(LPVOID*) &m_pDPClient);
if(hr!=S_OK) {...}
hr = m_pDPClient->Initialize(this, SendPlayCallMessage, 0);
if(hr!=S_OK) {...}
hr = CoCreateInstance(CLSID_DirectPlay8Address, NULL,
CLSCTX_INPROC_SERVER, IID_IDirectPlay8Address,
(LPVOID *)&m_pDPAddress);
if(hr!=S_OK) {...}
hr = m_pDPAddress->SetSP(&CLSID_DP8SP_MODEM);
if(hr!=S_OK) {...}
GUID GuidApp = {0xa8f02bed, 0xb09a, 0x4911,
{0xa1, 0xcd, 0xdb, 0x2, 0x57,
0x8b, 0x9c, 0x8f}};
DPN_APPLICATION_DESC dpAppDesc;
ZeroMemory(&dpAppDesc,sizeof(DPN_APPLICATION_DESC));
dpAppDesc.dwSize = sizeof(DPN_APPLICATION_DESC);
dpAppDesc.dwFlags = DPNSESSION_CLIENT_SERVER;
dpAppDesc.guidInstance = GUID_NULL;
dpAppDesc.guidApplication = GuidApp;
dpAppDesc.pwszSessionName = L"Session";
hr = CoCreateInstance(CLSID_DirectPlay8Address,NULL,
CLSCTX_INPROC_SERVER, IID_IDirectPlay8Address,
(LPVOID *)&m_pHostAddress);
if(hr!=S_OK) {...}
hr = m_pHostAddress->Clear();
hr =
m_pHostAddress->BuildFromURLA(
"x-directplay:/provider=%7B6D4A3650-628D-11D2-AE0F-006097B01411%7D"); //GUID модемный
if(hr!=S_OK) {...}
hr = m_pHostAddress->AddComponent(DPNA_KEY_PHONENUMBER,
wstrPhone, //номер, на который осуществляется звонок
(wcslen(wstrPhone)+1)*sizeof(WCHAR),
DPNA_DATATYPE_STRING);
if(hr!=S_OK) {...}
hr = m_pDPClient->Connect(&dpAppDesc, m_pHostAddress, m_pDPAddress, NULL, NULL,
NULL, 0, NULL, NULL,
DPNCONNECT_OKTOQUERYFORADDRESSING|DPNCONNECT_SYNC);
//
//вот тут и интересные дела творяться.
//С флажком DPNCONNECT_OKTOQUERYFORADDRESSING - прекрасно звонит и соединяется
//НО выбрасывает окошко...
//без этого флага дает ошибку DPNERR_INCOMPLETEADDRESS
//предполагаю, что следует добавить еще m_pHostAddress->AddComponent( с уточняющими
//параметрами) - вот только с какими? Кажется все перепробовал -
//ан нет - не желает... Может кто извас сталкивался с подобным?
return;
Удачи.
27.07.03 10:55: Перенесено модератором из 'Прочее' в Сети, Сокеты, Протоколы. — ХД
А, таки разобрался....
//определяем наличие модемов в системе:
DWORD dwSize = 1024;
DWORD dwItems = 0;
DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer = NULL;
pSPInfoBuffer = (DPN_SERVICE_PROVIDER_INFO*) new BYTE[dwSize];
hr = m_pDPClient->EnumServiceProviders
(&CLSID_DP8SP_MODEM, //pguidServiceProvider
NULL, pSPInfoBuffer, //pguidApplication, pSPInfoBuffer
&dwSize, &dwItems, 0 ); //pcbEnumData, pcReturned, dwFlags
//используем полученные данные:
hr = m_pDPAddress->SetDevice(&pSPInfoBuffer->guid);// CLSID_DP8SP_MODEM);
if(hr!=S_OK) {...}
//вуа-ля! Модем молча поднимает трубку, набирает номер и соединяется с сервером.
//
//Удачи. Будут вопросы - спрашивайте keyart_club@pochta.ws