DirectPlay
От: RatsTraper  
Дата: 14.07.03 11:46
Оценка:
Приветствую...

Такой вот вопрос возник.
Делаю 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: Перенесено модератором из 'Прочее' в Сети, Сокеты, Протоколы. — ХД
Re: DirectPlay
От: RatsTraper  
Дата: 16.07.03 06:19
Оценка: 4 (1)
А, таки разобрался....
//определяем наличие модемов в системе:
    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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.