DirectPlay DirectPlay C/C++ 레퍼런스 인터페이스 IDirectPlayVoiceClient Connect [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
클라이언트를 Microsoft® DirectPlay® Voice 세션에 접속한다.
구문
HRESULT Connect(
PDVSOUNDDEVICECONFIG pSoundDeviceConfig, PDVCLIENTCONFIG pdvClientConfig, DWORD dwFlags );
파라미터
- pSoundDeviceConfig
- [in] 사운드 장치 구성을 기술하는 DVSOUNDDEVICECONFIG 구조체의 포인터.
- pdvClientConfig
- [in] 클라이언트의 일반적 구성을 기술하는 DVCLIENTCONFIG 구조체의 포인터.
- dwFlags
- [in] 플래그. 다음의 플래그를 지정할 수 있다.
- DVFLAGS_SYNC
- 처리가 완료할 때까지 메서드는 돌아오지 않는다.
반환값
메서드가 동기를 잡으면서 처리되어 처리가 성공했을 경우는, DV_OK 를 돌려준다. 디폴트에서는, 이 메서드는 비동기에게 실행되어DV_PENDING 를 돌려준다. 에러의 경우는, 다음의 몇개의 값을 돌려준다.
DVERR_ALREADYPENDING 이 타입의 비동기 호출은 이미 보류 상태가 되어 있다. DVERR_COMPRESSIONNOTSUPPORTED 지정된 압축 타입이 로컬 컴퓨터로 지원하지 않는다. DVERR_INCOMPATIBLEVERSION 클라이언트는, 호스트와 호환성이 없는 음성 세션에 접속했다. DVERR_INVALIDDEVICE 지정된 장치가 무효이다. DVERR_INVALIDFLAGS 이 메서드에 건네진 플래그는 무효이다. DVERR_INVALIDOBJECT DirectPlay 개체의 포인터는 무효이다. DVERR_INVALIDPARAM 메서드에 건네진 1 개 이상의 파라미터가 무효이다. DVERR_INVALIDPOINTER 지정된 포인터가 무효이다. DVERR_NOTINITIALIZED 이 메서드를 호출하기 전에,IDirectPlayVoiceClient::Initialize 메서드 또는 IDirectPlayVoiceServer::Initialize 메서드를 호출할 필요가 있다. DVERR_OUTOFMEMORY 요구된 처리를 실행하려면 , 메모리가 부족하다. DVERR_RUNSETUP 지정된 오디오 구성은 테스트되지 않다. IDirectPlayVoiceTest::CheckAudioSetup 메서드를 호출할 필요가 있다. DVERR_SENDERROR 데이터의 송신중에 에러가 발생했다. DVERR_SOUNDINITFAILURE 사운드 카드의 초기화에 실패했다. DVERR_TIMEOUT 지정된 시간내에 처리를 실행할 수 없었다. DVERR_TRANSPORTNOPLAYER 지정된 트랜스포트는 접속되어 호스트가 되고 있지만, 로컬 player가 존재하지 않는다. DVERR_TRANSPORTNOSESSION 지정된 트랜스포트는 유효하지만, 접속되지 않은가 호스트가 되지 않았다. DVERR_CONNECTED DirectPlay Voice 개체가 접속되고 있다. DVERR_NOVOICESESSION 지정된 세션은 음성 세션은 아니다.
주의
이 메서드를 비동기에게 호출해, 메서드가 DVERR_PENDING 를 돌려주는 경우, 접속 시행의 결과가 포함된 DVMSGID_CONNECTRESULT 메시지를 수신한다. 이 메시지는, 메서드가 DVERR_PENDING 를 돌려주기 전 또는 후에 도착한다. 비동기에게 이 메서드를 호출하는 경우,DVMSGID_CONNECTRESULT 메시지는 수신하지 않는다.
DirectPlay Voice 세션에 클라이언트를 접속하기 전에 셋업 위저드를 호출해, 재생과 캡춰용으로 선택한 사운드 장치를 테스트할 필요가 있다. 애플리케이션의 기동시에는,IDirectPlayVoiceTest::CheckAudioSetup 를 사용해 오디오 구성을 확인한다. 이 메서드가 DVERR_RUNSETUP 를 돌려주는 경우, 지정된 사운드 구성은 테스트되지 않다. 셋업 위저드는 구성 마다 1 회만 실행할 필요가 있다.
버퍼의 형식이 올바르지 않은 경우, 메서드는 DVERR_INVALIDBUFFER 를 돌려준다.
DirectPlay Voice 가 버퍼에 기입하려고 했을 때에 버퍼 또는 버퍼의 일부가 잠금 되고 있는 경우, 메서드는 DVERR_INVALIDBUFFER 를 돌려주어, DirectPlay Voice 는 세션으로부터 접속 해제된다. 또,DVMSGID_SESSIONLOST 메시지를 받아들인다. 관련지을 수 있는 구조체의 hResult 멤버는 DVERR_LOCKEDBUFFER 로 설정된다. 이 후의 메서드의 호출은,DVERR_NOTCONNECTED 에러 코드를 돌려준다.
전이중 처리가 지원되지 않은 경우, DirectPlay Voice 는 반이중 (청취 전용) 모드에 돌아온다. 반이중 모드인지 아닌지를 조사하려면 , 접속을 완료한 다음에,IDirectPlayVoiceClient::GetSoundDeviceConfig 를 호출한다. 반이중 모드의 경우,DVSOUNDDEVICECONFIG 구조체의 dwFlags 멤버에 DVSOUNDCONFIG_HALFDUPLEX 플래그가 설정되어 있다.
인터페이스의 취득 방법과는 관계없이, DirectPlayVoiceClient 개체에서는,IDirectPlayVoiceClient::Disconnect 가 불려 갈 때까지,AddRef 에 의해, 사용하는 IDirectSound 인터페이스와 IDirectSoundCapture 인터페이스에의 참조가 유지된다. IDirectPlayVoiceClient::Disconnect 가 불려 가면 DirectPlayVoiceClient 개체는 양인터페이스에 대해서 Release 를 호출한다.
접속이 보류 상태가 되어 있는 동안에 IDirectPlayVoiceClient::Connect 를 호출하면, DVERR_ALREADYPENDING 가 반환된다. 또, 1 번에 1 개의 접속만을 보류 상태로 할 수 있다.
이 메서드를 호출하기 전에, 지정된 DirectPlay 개체에 대해서 트랜스포트 세션을 시작 하고 있을 필요가 있다. IDirectPlayVoiceClient::Initialize 의 호출이 성공한 후에 Connect 메서드를 호출할 필요가 있다.