Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programming / GameProg / RPG_Programming_2ed.pdf
Скачиваний:
240
Добавлен:
12.02.2016
Размер:
12.06 Mб
Скачать

Джим Адамс

специальный номер, конечно же GUID (Global Unique Identification),

знакомый Windows-программистам.

Создавая приложение, уделите минуту, чтобы назначить ему уникальный GUID и удостоверьтесь, что все приложения, которые будут соединяться с вашим по сети используют тот же самый GUID.

Вот и все, что я хотел сейчас сказать об отправке данных. Ход выполнения от создания сетевого объекта DirectPlay до отправки и получения данных для разных типов объектов очень похож, так что в последующем изложении я буду переплетать отдельную информацию.

Инициализация сетевого объекта

Первый этап DirectPlay — создание сетевого объекта, будь это сервер, клиент или одноранговый пользователь. Для инициализации интерфейса

каждой из этих сетевых моделей вы должны использовать функцию CoCreateInstance (которая детально описана в главе 4,

«Воспроизведение звуков и музыки с DirectX Audio и DirectShow»), указав соответствующий идентификатор класса и интерфейса из представленных ниже:

CLSID_DirectPlay8Address

IID_IDirectPlay8Address

CLSID_DirectPlay8Client

IID_IDirectPlay8Client

CLSID_DirectPlay8Peer

IID_IDirectPlay8Peer

CLSID_DirectPlay8Server

IID_IDirectPlay8Server

Так, чтобы используя CoCreateInstance создать объект сервера, воспользуйтесь следующим фрагментом кода:

IDirectPlay8Server *pDPServer;

if(FAILED(CoCreateInstance(CLSID_DirectPlay8Server, NULL, CLSCTX_INPROC, IID_IDirectPlay8Server, (void**)&pDPServer))) {

// Произошла ошибка

}

ВНИМАНИЕ! Обязательно убедитесь, что инициализировали COMсистему перед вызовом CoCreateInstance. или любой

функции DirectPlay. Для приложений, которые не используют несколько потоков (однопоточных), добавьте следующую строку до того, как делать какие-либо вызовы

DirectX:

CoInitialize(NULL);

С другой стороны, если вы используете многопоточность, воспользуйтесь следующим вызовом функции:

CoInitializeEx(NULL, COINIT_MULTITHREADED);

Убедитесь, что при завершении работы ваше приложение вызывает функцию CoUninitialize:

CoUninitialize();

netlib.narod.ru

265

Соседние файлы в папке GameProg