다음을 통해 공유


디바이스 열기

디바이스를 사용하기 전에 열기 (MCI_OPEN) 명령을 사용하여 초기화해야 합니다. 이 명령은 드라이버를 메모리에 로드하고(아직 로드되지 않은 경우) 후속 MCI 명령에서 디바이스를 식별하는 데 사용할 디바이스 식별자를 검색합니다. 새 디바이스 식별자를 사용하여 식별자가 유효한지 확인하기 전에 mciSendString 또는 mciSendCommand 함수의 반환 값을 검사 합니다. mciGetDeviceID 함수를 사용하여 디바이스 식별자를 검색할 수도 있습니다.

모든 MCI 명령 메시지와 마찬가지로 MCI_OPEN 연결된 구조가 있습니다. 이러한 구조를 매개 변수 블록이라고도 합니다. MCI_OPEN 기본 구조는 MCI_OPEN_PARMS. 파 오버레이와 같은 특정 디바이스에는 추가 선택적 매개 변수를 수용하기 위해 확장 구조( 예: MCI_WAVE_OPEN_PARMSMCI_OVLY_OPEN_PARMS)가 있습니다. 이러한 추가 매개 변수를 사용해야 하는 경우가 아니면 MCI 디바이스에서 MCI_OPEN_PARMS 구조를 사용할 수 있습니다.

열 수 있는 디바이스 수는 사용 가능한 메모리 양에 의해서만 제한됩니다.

별칭 사용

디바이스를 열 때 "별칭" 플래그를 사용하여 디바이스에 대한 디바이스 식별자를 지정할 수 있습니다. 이 플래그를 사용하면 파일 이름이 긴 복합 디바이스에 대해 짧은 디바이스 식별자를 할당할 수 있으며 동일한 파일 또는 디바이스의 여러 인스턴스를 열 수 있습니다.

예를 들어 다음 명령은 긴 파일 이름 C:\NABIRDS\SOUNDS\MOCKMTNG에 디바이스 식별자 "birdcall"을 할당합니다. Wav:

mciSendString(
    "open c:\nabirds\sounds\mockmtng.wav type waveaudio alias birdcall", 
    lpszReturnString, lstrlen(lpszReturnString), NULL);

명령 메시지 인터페이스에서 MCI_OPEN_PARMS 구조체의 lpstrAlias 멤버를 사용하여 별칭을 지정합니다.

디바이스 유형 지정

디바이스를 열 때 "type" 플래그를 사용하여 특정 디바이스 드라이버가 아닌 디바이스 유형을 참조할 수 있습니다. 다음 예제에서는 파형 오디오 파일 C:\WINDOWS\CHIMES를 엽니다. WAV("type" 플래그를 사용하여 waveaudio 디바이스 형식 지정) 및 별칭 "chimes"를 할당합니다.

mciSendString(
    "open c:\windows\chimes.wav type waveaudio alias chimes", 
    lpszReturnString, lstrlen(lpszReturnString), NULL);

명령 메시지 인터페이스에서 "type" 플래그의 기능은 MCI_OPEN_PARMS 구조체의 lpstrDeviceType 멤버에 의해 제공됩니다.

단순 및 복합 디바이스

MCI는 디바이스 드라이버를 복합 또는 단순으로 분류합니다. 복합 디바이스용 드라이버에는 재생을 위해 데이터 파일의 이름이 필요합니다. 간단한 디바이스용 드라이버는 그렇지 않습니다.

간단한 디바이스에는 cdaudiovideodisc 디바이스가 포함됩니다. 간단한 디바이스를 여는 방법에는 두 가지가 있습니다.

  • 레지스트리 또는 SYSTEM.INI 파일의 디바이스 이름을 포함하는 null로 끝나는 문자열에 대한 포인터를 지정합니다.

    예를 들어 다음 명령을 사용하여 videodisc 디바이스를 열 수 있습니다.

    mciSendString("open videodisc", lpszReturnString, 
        lstrlen(lpszReturnString), NULL);

이 경우 "videodisc"는 레지스트리의 디바이스 이름 또는 SYSTEM.INI [mci] 섹션입니다.

  • 디바이스 드라이버의 실제 이름을 지정합니다. 그러나 디바이스 드라이버 파일 이름을 사용하여 디바이스를 열면 애플리케이션 디바이스가 특정하게 되며 시스템 구성이 변경되면 애플리케이션이 실행되지 않도록 방지할 수 있습니다. 파일 이름을 사용하는 경우 전체 경로 또는 파일 이름 확장자를 지정할 필요가 없습니다. MCI는 드라이버가 시스템 디렉터리에 있고 가 있다고 가정합니다. DRV 파일 이름 확장명.

복합 디바이스에는 waveaudio시퀀서 디바이스가 포함됩니다. 복합 디바이스에 대한 데이터를 디바이스 요소라고도 합니다. 그러나 이 문서는 일반적으로 이 데이터를 파일로 참조하지만 경우에 따라 데이터가 파일로 저장되지 않을 수도 있습니다.

복합 디바이스를 여는 방법에는 세 가지가 있습니다.

  • 디바이스 이름만 지정합니다. 이렇게 하면 파일 이름을 연결하지 않고 복합 디바이스를 열 수 있습니다. 대부분의 복합 디바이스는 이러한 방식으로 열릴 때 기능 (MCI_GETDEVCAPS) 및 닫기 (MCI_CLOSE) 명령만 처리합니다.
  • 파일 이름만 지정합니다. 디바이스 이름은 레지스트리의 연결에서 결정됩니다.
  • 파일 이름 및 디바이스 이름을 지정합니다. MCI는 레지스트리의 항목을 무시하고 지정된 디바이스 이름을 엽니다.

데이터 파일을 특정 디바이스와 연결하려면 파일 이름 및 디바이스 이름을 지정할 수 있습니다. 예를 들어 다음 명령은 파일 이름 MYVOICE를 사용하여 waveaudio 디바이스를 엽니다. Snd:

mciSendString("open myvoice.snd type waveaudio", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

명령 문자열 인터페이스에서 open 명령과 함께 설명된 대로 대체 느낌표 형식을 사용하여 디바이스 이름 사양을 약식으로 지정할 수도 있습니다.

파일 이름 확장자를 사용하여 디바이스 열기

열기(MCI_OPEN) 명령이 파일 이름만 지정하는 경우 MCI는 파일 이름 확장명을 사용하여 레지스트리의 목록에서 적절한 디바이스를 선택하거나 SYSTEM.INI 파일의 [mci 확장] 섹션을 선택합니다. [mci 확장] 섹션의 항목은 다음 양식을 사용합니다.

= filename_extension device_name

MCI는 확장이 발견되고 열려 있는 명령에서 디바이스 이름이 지정되지 않은 경우 device_name 암시적으로 사용합니다.

다음 예제에서는 일반적인 [mci 확장] 섹션을 보여 줍니다.

[mci extensions]
wav=waveaudio
mid=sequencer
rmi=sequencer

MCI는 이러한 정의를 사용하여 다음 명령이 실행되면 waveaudio 디바이스를 엽니다.

mciSendString("open train.wav", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

새 데이터 파일

새 데이터 파일을 만들려면 빈 파일 이름을 지정하기만 하면 됩니다. MCI는 저장(MCI_SAVE) 명령을 사용하여 저장할 때까지 새 파일을 저장하지 않습니다. 새 파일을 만들 때 열기 (MCI_OPEN) 명령을 사용하여 디바이스 별칭을 포함해야 합니다.

다음 예제에서는 새 waveaudio 파일을 열고, 기록을 시작하고 중지한 다음, 파일을 저장하고 닫습니다.

mciSendString("open new type waveaudio alias capture", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);
mciSendString("record capture", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);
mciSendString("stop capture", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);
mciSendString("save capture orca.wav", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);
mciSendString("close capture", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

공유 가능한 디바이스

열기(MCI_OPEN) 명령의 "공유 가능"(MCI_OPEN_SHAREABLE) 플래그를 사용하면 여러 애플리케이션이 동일한 디바이스(또는 파일) 및 디바이스 instance 동시에 액세스할 수 있습니다. 애플리케이션이 공유 가능한 디바이스 또는 파일을 여는 경우 다른 애플리케이션도 공유 가능으로 열어 액세스할 수 있습니다. 공유 디바이스 또는 파일은 각 애플리케이션에 해당 작동 상태를 제어하는 매개 변수를 변경할 수 있는 기능을 제공합니다. 디바이스 또는 파일이 공유 가능으로 열릴 때마다 MCI는 식별자가 동일한 instance 참조하더라도 고유한 디바이스 식별자를 반환합니다.

애플리케이션이 공유 가능 여부를 지정하지 않고 디바이스 또는 파일을 여는 경우 애플리케이션이 디바이스를 닫을 때까지 다른 애플리케이션에서 액세스할 수 없습니다. 또한 디바이스에서 열려 있는 instance 하나만 지원하는 경우 공유 가능한 플래그를 지정하면 열기 명령이 실패합니다.

애플리케이션이 디바이스를 열고 공유할 수 있다고 지정하는 경우 애플리케이션은 이 디바이스의 상태를 가정해서는 안 됩니다. 애플리케이션은 디바이스에 액세스하는 다른 애플리케이션의 변경 내용을 보정해야 할 수 있습니다.

대부분의 복합 파일은 공유할 수 없습니다. 그러나 여러 파일을 열거나 단일 파일을 여러 번 열 수 있습니다. 단일 파일을 여러 번 열면 MCI는 각각에 대해 독립적인 instance 만들고 각 instance 고유한 작동 상태 갖습니다.

파일의 여러 인스턴스를 여는 경우 각각에 고유한 디바이스 식별자를 할당해야 합니다. 다음 섹션에 설명된 대로 별칭을 사용하여 각 파일에 고유한 이름을 할당할 수 있습니다.