Создаю я сервер в полном согласии с SDK:
CoCreateInstance CLSID_DirectPlay8Server
сервер->Initialize();
CoCreateInstance CLSID_DirectPlay8Address
адрес->SetSP(&CLSID_DP8SP_TCPIP);
адрес->AddComponent(порт 27543);
сервер->Host(структура с параметрами, адрес);
адрес->GetURLa();
И получаю от последнего метода:
x-directplay:/provider=%7BEBFE7BA0-628D-11D2-AE0F-006097B01411%7D;port=27543
Два вопроса:
1) Почему эта строка не несёт в себе информации об моём IP адресе (числа в процентах -- GUID провайдера, в данном случае TCP/IP)?Нафиг нужен этот адрес, если клиент и так знает и порт, и провайдера (TCP/IP)?
2) В разных местах пробую делать сервер->SetServerInfo, но при любых параметрах выдаётся ошибка DPNERR_INVALIDFLAGS, хотя флаг стоит единственно допустимый -- DPNSETSERVERINFO_SYNC. Он, очевидно, может быть как-то связан с другим параметром функции -- phAsyncHandle, хотя ошибка случается и при передаче в качестве этого параметра NULL, и при передаче в качестве него требуемого определением функции указателя на DWORD (для возвращения значения хэндла асинхронного выполнения). Что делать? Почему в SDK написано, что без вызова SetServerInfo ничего работать не будет (Clients cannot сonnect to a server until this method has been called), а в их samples им и не пахнет?
Без DPNSETSERVERINFO_SYNC очень не приемлимо, я не пробовал.
12.01.03 06:18: Перенесено модератором из 'Мультимедиа, графика, звук' — H_D
Здравствуйте, Михаил Орлов, Вы писали:
МО>Два вопроса:
МО>1) Почему эта строка не несёт в себе информации об моём IP адресе (числа в процентах -- GUID провайдера, в данном случае TCP/IP)?МО>Нафиг нужен этот адрес, если клиент и так знает и порт, и провайдера (TCP/IP)?
О каком IP адресе ???, у тебя их может быть бесконечное количество даже на одном физическом интерфейсе
МО>2) В разных местах пробую делать сервер->SetServerInfo, но при любых параметрах выдаётся ошибка DPNERR_INVALIDFLAGS, хотя флаг МО>стоит единственно допустимый -- DPNSETSERVERINFO_SYNC. Он, очевидно, может быть как-то связан с другим параметром функции -- МО>phAsyncHandle, хотя ошибка случается и при передаче в качестве этого параметра NULL, и при передаче в качестве него требуемого МО>определением функции указателя на DWORD (для возвращения значения хэндла асинхронного выполнения). Что делать? Почему в SDK МО>написано, что без вызова SetServerInfo ничего работать не будет (Clients cannot сonnect to a server until this method has been МО>called), а в их samples им и не пахнет?
Без вызова SetServerInfo работать будет(правда у меня директ 8.1, вот на 8-м не уверен, не пробовал), почему они это написали наверное стоит у них узнать, я не вкурсе.
В примерах 8-го директа нигде не используется вызов SetServerInfo, однако в примерах директа 8.1 есть. Скорее всего ты нахомутал
что-то с параметрами. Вот собсно тебе вызов от мелкософта
<...>
DPN_PLAYER_INFO dpPlayerInfo;
ZeroMemory(&dpPlayerInfo, sizeof(DPN_PLAYER_INFO));
dpPlayerInfo.dwSize = sizeof(DPN_PLAYER_INFO);
dpPlayerInfo.dwInfoFlags = DPNINFO_NAME;
dpPlayerInfo.pwszName = wszName;
dpPlayerInfo.pvData = NULL;
dpPlayerInfo.dwDataSize = NULL;
dpPlayerInfo.dwPlayerFlags = 0;
if( FAILED( hr = g_pDPServer->SetServerInfo( &dpPlayerInfo, NULL, NULL,
DPNSETSERVERINFO_SYNC ) ) )
{
<...>
}
МО>Без DPNSETSERVERINFO_SYNC очень не приемлимо, я не пробовал.