mmioOpen 함수(mmiscapi.h)
mmioOpen 함수는 버퍼링되지 않거나 버퍼링된 I/O에 대한 파일을 엽니다. 파일을 만듭니다. 파일을 삭제합니다. 또는 파일이 있는지 확인합니다. 파일은 표준 파일, 메모리 파일 또는 사용자 지정 스토리지 시스템의 요소일 수 있습니다. mmioOpen에서 반환된 핸들은 표준 파일 핸들이 아닙니다. 멀티미디어 파일 I/O 함수 이외의 파일 I/O 함수에는 사용하지 마세요.
구문
HMMIO mmioOpen(
LPSTR pszFileName,
LPMMIOINFO pmmioinfo,
DWORD fdwOpen
);
매개 변수
pszFileName
파일 이름을 포함하는 버퍼에 대한 포인터입니다. 파일을 열도록 I/O 프로시저가 지정되지 않은 경우 파일 이름은 다음과 같이 파일을 여는 방법을 결정합니다.
- 파일 이름에 더하기 기호(+)가 없으면 표준 파일의 이름(즉, 형식이 HMMIO가 아닌 파일)으로 간주됩니다.
- 파일 이름이 EXAMPLE 형식이면 입니다. EXT+ABC 확장명은 파일에서 I/O를 수행하기 위해 호출되는 설치된 I/O 프로시저를 식별하는 것으로 간주됩니다. 자세한 내용은 mmioInstallIOProc을 참조하세요.
- 파일 이름이 NULL이고 I/O 프로시저가 지정되지 않은 경우 MMIOINFO 구조체의 adwInfo 멤버는 현재 열려 있는 파일의 표준(비 HMMIO) 파일 핸들로 간주됩니다.
메모리 파일을 열 때 szFilename 을 NULL로 설정합니다.
pmmioinfo
mmioOpen에서 사용하는 추가 매개 변수를 포함하는 MMIOINFO 구조체에 대한 포인터입니다. 메모리 파일을 열거나 버퍼링된 I/O에 대한 버퍼 크기를 지정하거나 제거된 I/O 프로시저를 지정하여 파일을 열지 않는 한 이 매개 변수는 NULL이어야 합니다. 이 매개 변수가 NULL이 아닌 경우 참조하는 MMIOINFO 구조체의 사용되지 않는 모든 멤버를 예약 멤버를 포함하여 0으로 설정해야 합니다.
fdwOpen
열린 작업에 대한 플래그입니다. MMIO_READ, MMIO_WRITE 및 MMIO_READWRITE 플래그는 상호 배타적입니다. 하나만 지정해야 합니다. MMIO_COMPAT, MMIO_EXCLUSIVE, MMIO_DENYWRITE, MMIO_DENYREAD 및 MMIO_DENYNONE 플래그는 파일 공유 플래그입니다. 다음 값이 정의됩니다.
값 | 의미 |
---|---|
MMIO_ALLOCBUF | 버퍼링된 I/O에 대한 파일을 엽니다. 기본 버퍼 크기(8K, MMIO_DEFAULTBUFFER 정의됨)보다 크거나 작은 버퍼를 할당하려면 MMIOINFO 구조체의 cchBuffer 멤버를 원하는 버퍼 크기로 설정합니다. cchBuffer가 0이면 기본 버퍼 크기가 사용됩니다. 고유한 I/O 버퍼를 제공하는 경우 이 플래그를 사용하면 안 됩니다. |
MMIO_COMPAT | 호환성 모드로 파일을 열어 지정된 컴퓨터의 모든 프로세스가 파일을 횟수만큼 열 수 있도록 합니다. 다른 공유 모드를 사용하여 파일을 연 경우 mmioOpen이 실패합니다. |
MMIO_CREATE | 새 파일을 만듭니다. 파일이 이미 있는 경우 길이가 0으로 잘립니다. 메모리 파일의 경우 이 플래그는 파일의 끝이 처음에 버퍼의 시작 부분에 있음을 나타냅니다. |
MMIO_DELETE | 파일을 삭제합니다. 이 플래그를 지정하면 szFilename 이 NULL이 아니어야 합니다. 파일이 성공적으로 삭제된 경우 반환 값은 TRUE ( HMMIO로 캐스팅)이거나 그렇지 않으면 FALSE 입니다. 삭제된 파일에 대해 mmioClose 함수를 호출하지 마세요. 이 플래그를 지정하면 파일을 여는 다른 모든 플래그는 무시됩니다. |
MMIO_DENYNONE | 파일에 대한 다른 프로세스 읽기 또는 쓰기 액세스를 거부하지 않고 파일을 엽니다. 파일이 다른 프로세스에 의해 호환 모드로 열려 있으면 mmioOpen이 실패합니다. |
MMIO_DENYREAD | 파일을 열고 다른 프로세스에서 파일에 대한 읽기 권한을 거부합니다. 파일이 호환 모드로 열려 있거나 다른 프로세스의 읽기 액세스를 위해 열려 있는 경우 mmioOpen이 실패합니다. |
MMIO_DENYWRITE | 파일을 열고 파일에 대한 다른 프로세스 쓰기 액세스를 거부합니다. 파일이 호환 모드로 열려 있거나 다른 프로세스의 쓰기 액세스를 위해 열려 있는 경우 mmioOpen이 실패합니다. |
MMIO_EXCLUSIVE | 파일을 열고 파일에 대한 읽기 및 쓰기 권한을 다른 프로세스에서 거부합니다. 파일이 읽기 또는 쓰기 액세스를 위해 다른 모드로 열려 있는 경우 현재 프로세스에서도 mmioOpen 이 실패합니다. |
MMIO_EXIST | 지정된 파일이 있는지 여부를 확인하고 szFilename에 지정된 경로에서 정규화된 파일 이름을 만듭니다. 정규화에 성공하고 파일이 있는 경우 반환 값은 TRUE ( HMMIO로 캐스팅)이며, 그렇지 않으면 FALSE 입니다. 파일이 열리지 않고 함수가 유효한 멀티미디어 파일 I/O 파일 핸들을 반환하지 않으므로 파일을 닫으려고 시도하지 않습니다.
참고 애플리케이션은 대신 GetFileAttributes 또는 GetFileAttributesEx를 호출해야 합니다.
|
MMIO_GETTEMP |
필요에 따라 szFilename 에 전달된 매개 변수를 사용하여 임시 파일 이름을 만듭니다. 예를 들어 "C:F"를 지정하여 문자 "F"로 시작하여 C 드라이브에 있는 임시 파일을 만들 수 있습니다. 결과 파일 이름은 szFilename이 가리키는 버퍼에 복사됩니다. 버퍼는 128자 이상을 보유할 수 있을 만큼 커야 합니다.
임시 파일 이름을 성공적으로 만든 경우 반환 값은 MMSYSERR_NOERROR ( HMMIO로 캐스팅)됩니다. 그렇지 않으면 반환 값이 MMIOERR_FILENOTFOUND . 파일이 열리지 않고 함수가 유효한 멀티미디어 파일 I/O 파일 핸들을 반환하지 않으므로 파일을 닫으려고 시도하지 않습니다. 이 플래그는 다른 모든 플래그를 재정의합니다. 참고 대신 애플리케이션에서 GetTempFileName 을 호출해야 합니다.
|
MMIO_PARSE |
szFilename에 지정된 경로에서 정규화된 파일 이름을 만듭니다. 정규화된 이름은 szFilename이 가리키는 버퍼에 복사됩니다. 버퍼는 128자 이상을 보유할 수 있을 만큼 커야 합니다.
함수가 성공하면 반환 값은 TRUE ( HMMIO로 캐스팅)입니다. 그렇지 않으면 반환 값이 FALSE입니다. 파일이 열리지 않고 함수가 유효한 멀티미디어 파일 I/O 파일 핸들을 반환하지 않으므로 파일을 닫으려고 시도하지 않습니다. 이 플래그를 지정하면 파일을 여는 모든 플래그가 무시됩니다. 참고 애플리케이션은 대신 GetFullPathName 을 호출해야 합니다.
|
MMIO_READ | 읽기 전용으로 파일을 엽니다. MMIO_WRITE 및 MMIO_READWRITE 지정되지 않은 경우 기본값입니다. |
MMIO_READWRITE | 읽기 및 쓰기용 파일을 엽니다. |
MMIO_WRITE | 쓰려는 경우에만 파일을 엽니다. |
반환 값
열린 파일의 핸들을 반환합니다. 파일을 열 수 없는 경우 반환 값은 NULL입니다. lpmmioinfo가 NULL이 아닌 경우 MMIOINFO 구조체의 wErrorRet 멤버에는 다음 오류 값 중 하나가 포함됩니다.
반환 코드 | 설명 |
---|---|
|
파일이 보호되며 열 수 없습니다. |
|
또 다른 오류 조건이 발생했습니다. 이는 오픈 파일 오류의 기본 오류입니다. |
|
네트워크에서 원격 파일 열기 요청에 응답하지 않습니다. |
|
디렉터리 사양이 잘못되었습니다. |
|
파일이 다른 애플리케이션에서 사용되고 있으며 사용할 수 없습니다. |
|
동시에 열려 있는 파일 수는 최대 수준입니다. 시스템에서 사용 가능한 파일 핸들이 부족합니다. |
설명
lpmmioinfo가 MMIOINFO 구조를 가리키는 경우 다음과 같이 구조체의 멤버를 초기화합니다. 예약 멤버를 포함하여 사용되지 않는 모든 멤버를 0으로 설정해야 합니다.
- 설치된 I/O 프로시저를 사용하여 파일을 열도록 요청하려면 fccIOProc 을 I/O 프로시저의 4자 코드로 설정하고 pIOProc 을 NULL로 설정합니다.
- 제거된 I/O 프로시저를 사용하여 파일을 열도록 요청하려면 I/O 프로시저를 가리키도록 IOProc 을 설정하고 fccIOProc 을 NULL로 설정합니다.
- mmioOpen이 szFilename에 포함된 파일 이름을 기반으로 파일을 여는 데 사용할 I/O 프로시저를 결정하도록 요청하려면 fccIOProc 및 pIOProc을 NULL로 설정합니다. MMIOINFO 구조체가 지정되지 않은 경우 기본 동작입니다.
- 내부적으로 할당되고 관리되는 버퍼를 사용하여 메모리 파일을 열려면 pchBuffer 를 NULL로, fccIOProc 을 FOURCC_MEM, cchBuffer 를 버퍼의 초기 크기로 설정하고, adwInfo 를 버퍼의 증분 확장 크기로 설정합니다. 이 메모리 파일은 필요할 때 adwInfo 에 지정된 바이트 수만큼 자동으로 확장됩니다. 처음에 파일의 끝을 버퍼의 시작 부분으로 설정하려면 dwOpenFlags 매개 변수에 대한 MMIO_CREATE 플래그를 지정합니다.
- 애플리케이션 제공 버퍼를 사용하여 메모리 파일을 열려면 pchBuffer 를 메모리 버퍼를 가리키도록 설정하고, fccIOProc 을 FOURCC_MEM, cchBuffer 를 버퍼의 크기로 설정하고, adwInfo 를 버퍼의 증분 확장 크기로 설정합니다. adwInfo의 확장 크기는 pchBuffer가 GlobalAlloc 및 GlobalLock 함수를 호출하여 가져온 포인터인 경우에만 0이 아니어야 합니다. 이 경우 GlobalReAlloc 함수가 호출되어 버퍼를 확장합니다. 즉, pchBuffer 가 로컬 또는 전역 배열 또는 로컬 힙의 메모리 블록을 가리키는 경우 adwInfo 는 0이어야 합니다. 처음에 파일의 끝을 버퍼의 시작 부분으로 설정하려면 dwOpenFlags 매개 변수에 대한 MMIO_CREATE 플래그를 지정합니다. 그렇지 않으면 전체 메모리 블록이 읽을 수 있는 것으로 간주됩니다.
- 멀티미디어 파일 I/O 서비스와 함께 현재 열려 있는 표준 파일 핸들(즉, HMMIO 형식이 없는 파일 핸들)을 사용하려면 fccIOProc 을 FOURCC_DOS, pchBuffer 를 NULL로 설정하고, adwInfo 를 표준 파일 핸들로 설정합니다. 파일 내의 오프셋은 파일의 시작 부분을 기준으로 하며 mmioOpen 이 호출될 때 표준 파일의 위치와 관련이 없습니다. 초기 멀티미디어 파일 I/O 오프셋은 mmioOpen 이 호출될 때 표준 파일의 오프셋과 동일합니다. 표준 파일 핸들을 닫지 않고 멀티미디어 파일 I/O 파일 핸들을 닫려면 MMIO_FHOPEN 플래그를 mmioClose에 전달합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | mmiscapi.h(Mmiscapi.h, Windows.h 포함) |
라이브러리 | Winmm.lib |
DLL | Winmm.dll |