Returning Information in an MCI Structure

When you use an MCI structure to return integer information that also has a string equivalent, MCI needs the string ID to find it in the resource table. The high-order word of the return member is set to the string ID. The low-order word of the return member is set to the return value. You can use the MAKEMCIRESOURCE macro to combine these values. For example, the follow statement assigns information for the songpointer format to the return member:


lpStatus->dwReturn = MAKEMCIRESOURCE(MCI_SEQ_FORMAT_SONGPTR,
    MCI_SEQ_FORMAT_SONGPTR_S);

Many of the return values defined in MMSYSTEM.H also have a string resource ID defined in MMDDK.H. Identifiers which are only used for return values and are not input parameters will normally have only one version (they do not have a resource identifier with the _S suffix). The following string resource IDs are defined by MMDDK.H:

String Resource ID

MCI Constant

MCI_FORMAT_BYTES_S

MCI_FORMAT_BYTES

MCI_FORMAT_FRAMES_S

MCI_FORMAT_FRAMES

MCI_FORMAT_HMS_S

MCI_FORMAT_HMS

MCI_FORMAT_MILLISECONDS_S

MCI_FORMAT_MILLISECONDS

MCI_FORMAT_MSF_S

MCI_FORMAT_MSF

MCI_FORMAT_SAMPLES_S

MCI_FORMAT_SAMPLES

MCI_FORMAT_SMPTE_24_S

MCI_FORMAT_SMPTE_24

MCI_FORMAT_SMPTE_25_S

MCI_FORMAT_SMPTE_25

MCI_FORMAT_SMPTE_30_S

MCI_FORMAT_SMPTE_30

MCI_FORMAT_SMPTE_30DROP_S

MCI_FORMAT_SMPTE_30DROP

MCI_FORMAT_TMSF_S

MCI_FORMAT_TMSF

MCI_SEQ_FILE_S

MCI_SEQ_FILE

MCI_SEQ_FORMAT_SONGPTR_S

MCI_SEQ_FORMAT_SONGPTR

MCI_SEQ_MAPPER_S

MCI_SEQ_MAPPER

MCI_SEQ_MIDI_S

MCI_SEQ_MIDI

MCI_SEQ_NONE_S

MCI_SEQ_NONE

MCI_SEQ_SMPTE_S

MCI_SEQ_SMPTE

MCI_VD_FORMAT_TRACK_S

MCI_VD_FORMAT_TRACK

MIDIMAPPER_S

MIDIMAPPER

WAVE_FORMAT_PCM_S

WAVE_FORMAT_PCM

WAVE_MAPPER_S

WAVE_MAPPER


MCI uses the high-order word of the DriverProc return value to tell mciSendString how to convert the information returned in the MCI structure into string form. (The mciSendString function translates the string interface used by an application to the command interface used by your device driver.) The following flags are defined for the high-order word of the DriverProc return value:

Flag

Meaning

MCI_RESOURCE_RETURNED

Indicates the high-order word of the value in the return member is a string resource ID. This ID is translated by mciSendString by loading the specified resource.

MCI_RESOURCE_DRIVER

Indicates the high-order word of the value in the return member is a string resource ID defined by the device driver. This flag requires MCI_RESOURCE_RETURNED.

MCI_COLONIZED3_RETURN | MCI_COLONIZED4_RETURN

Indicates that when the DWORD value in the return member is converted into a string, its individual bytes should be separated by colons.

MCI_INTEGER_RETURNED

Indicates that the value in a structure that allows either integer or string returns is an integer value.


Integer return values which have resource string equivalents are indicated by setting the MCI_RESOURCE_RETURNED bit in the error return. This indicates that the high-order word of the value in the return member is a string ID to load. An application that uses mciSendCommand to call your driver will not see the high-order word of the return value when you return MCI_RESOURCE_RETURNED. When this flag is set, MCI will clear the high-order word of the return member before it returns to the application. Using the high-order word for resource data restricts the integer return value to the 16-bits of the low-order word. The following code fragment sets the MCI_RESOURCE_RETURNED bit for the DriverProc return value:


lpStatus-dwReturn = MAKEMCIRESOURCE(MCI_SEQ_FORMAT_SONGPTR,
    MCI_SEQ_FORMAT_SONGPTR_S);
return MCI_RESOURCE_RETURNED;

If your device driver defines the resource string, use the MCI_RESOURCE_DRIVER flag with the MCI_RESOURCE_RETURNED flag.

If your device driver returns information in the return member that should be separated by colons when it is displayed, use the MCI_COLONIZED3_RETURN or MCI_COLONIZED4_RETURN flag. For example, 0x01020304 is "colonized" as "4:3:2" for MCI_COLONIZED3_RETURN or "4:3:2:1" for MCI_COLONIZED4_RETURN.

If the return member of the structure can return either integer or string values, and your device driver is returning an integer value, use the MCI_INTEGER_RETURNED flag in the DriverProc return value. For example, the sysinfo command can return both string and integer data. When this flag is set, the returned integer is converted into a string equivalent by mciSendString.

Structures that return string data or RECT data do not require that you set any flags in the return value for DriverProc.