Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2005-08

mmsystem unit : errors

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Jean-Marc Chourot

Hi all,
Could someone help to understand what happens with this piece of code : When I call the following function, I very very often receive an error :MCIERR_PARAM_OVERFLOW: writeln(err,' The output string was not long enough.');
Does anybody know why ? why is the pchar too small ? thx for help
JM

function SendMCIString2(cmd :PChar) :pchar;
var x: hwnd;
     a:pchar ;
     l:integer;
     err:dword;
begin
err:= mciSendString(cmd, a, Sizeof(a), x);
if err=0 then
 result:= a
 else begin
 case err of
 MCIERR_BAD_CONSTANT: writeln('The value specified for a parameter is
unknown.');
MCIERR_BAD_INTEGER:writeln(' An integer in the command was invalid or
missing.');
MCIERR_DUPLICATE_FLAGS: writeln('A flag or value was specified twice.');
MCIERR_MISSING_COMMAND_STRING:writeln(' No command was specified.');
MCIERR_MISSING_DEVICE_NAME:writeln(' No device name was specified. ');
MCIERR_MISSING_STRING_ARGUMENT:writeln(' A string value was missing from the
command.');
MCIERR_NEW_REQUIRES_ALIAS:writeln(' An alias must be used with the "new"
device name.');
MCIERR_NO_CLOSING_QUOTE: writeln('A closing quotation mark is missing.');
MCIERR_NOTIFY_ON_AUTO_OPEN :writeln('The "notify" flag is illegal with
auto-open.');
MCIERR_PARAM_OVERFLOW: writeln(err,' The output string was not long
enough.');
MCIERR_PARSER_INTERNAL:writeln(' An internal parser error occurred.');
MCIERR_UNRECOGNIZED_KEYWORD:writeln(' An unknown command parameter was
specified.');
MCIERR_BAD_TIME_FORMAT:writeln(' The specified value for the time format is
invalid.') ;
MCIERR_CANNOT_LOAD_DRIVER:writeln(' The specified device driver will not
load properly.');
MCIERR_CANNOT_USE_ALL:writeln(' The device name "all" is not allowed for
this command.') ;
MCIERR_CREATEWINDOW :writeln('Could not create or use window.');
MCIERR_DEVICE_LENGTH:writeln(' The device or driver name is too long.
Specify a device or driver name that is less than 79 characters.');
MCIERR_DEVICE_LOCKED:writeln(' The device is now being closed. Wait a few
seconds, then try again.');
MCIERR_DEVICE_NOT_INSTALLED:writeln(' The specified device is not installed
on the system. Use the Drivers option from the Control Panel to install the
device.');
MCIERR_DEVICE_NOT_READY:writeln(' The device driver is not ready.');
MCIERR_DEVICE_OPEN :writeln('The device name is already used as an alias by
this application. Use a unique alias.');
MCIERR_DEVICE_ORD_LENGTH:writeln(' The device or driver name is too long.
Specify a device or driver name that is less than 79 characters.');
MCIERR_DEVICE_TYPE_REQUIRED:writeln(' The specified device cannot be found
on the system. Check that the device is installed and the device name is
spelled correctly.');
MCIERR_DRIVER:writeln(' The device driver exhibits a problem. Check with the
device manufacturer about obtaining a new driver.');
MCIERR_DRIVER_INTERNAL:writeln(' The device driver exhibits a problem. Check
with the device manufacturer about obtaining a new driver.');
MCIERR_DUPLICATE_ALIAS:writeln(' The specified alias is already used in this
application. Use a unique alias.');
MCIERR_EXTENSION_NOT_FOUND :writeln('The specified extension has no device
type associated with it. Specify a device type.');
MCIERR_EXTRA_CHARACTERS :writeln('You must enclose a string with quotation
marks; characters following the closing quotation mark are not valid.');
MCIERR_FILE_NOT_FOUND :writeln('The requested file was not found. Check that
the path and filename are correct.');
MCIERR_FILE_NOT_SAVED :writeln('The file was not saved. Make sure your
system has sufficient disk space or has an intact network connection.');
MCIERR_FILE_READ :writeln('A read from the file failed. Make sure the file
is present on your system or that your system has an intact network
connection.');
MCIERR_FILE_WRITE:writeln(' A write to the file failed. Make sure your
system has sufficient disk space or has an intact network connection.');
MCIERR_FILENAME_REQUIRED :writeln('The filename is invalid. Make sure the
filename is no longer than eight characters, followed by a period and an
extension.');
MCIERR_FLAGS_NOT_COMPATIBLE :writeln('The specified parameters cannot be
used together.');
MCIERR_GET_CD :writeln('The requested file OR MCI device was not found. Try
changing directories or restarting your system.');
MCIERR_HARDWARE :writeln('The specified device exhibits a problem. Check
that the device is working correctly or contact the device manufacturer.');
MCIERR_ILLEGAL_FOR_AUTO_OPEN :writeln('MCI will not perform the specified
command on an automatically opened device. Wait until the device is closed,
then try to perform the command.');
MCIERR_INTERNAL :writeln('A problem occurred in initializing MCI. Try
restarting the Windows operating system.');
MCIERR_INVALID_DEVICE_ID:writeln(' Invalid device ID. Use the ID given to
the device when the device was opened.');
MCIERR_INVALID_DEVICE_NAME :writeln('The specified device is not open nor
recognized by MCI.');
MCIERR_INVALID_FILE:writeln(' The specified file cannot be played on the
specified MCI device. The file may be corrupt or may use an incorrect file
format.');
MCIERR_MISSING_PARAMETER:writeln(' The specified command requires a
parameter, which you must supply.');
MCIERR_MULTIPLE:writeln(' Errors occurred in more than one device. Specify
each command and device separately to identify the devices causing the
errors.');
MCIERR_MUST_USE_SHAREABLE :writeln('The device driver is already in use. You
must specify the "shareable" parameter with each open command to share the
device.');
MCIERR_NO_ELEMENT_ALLOWED:writeln(' The specified device does not use a
filename.');
MCIERR_NO_INTEGER :writeln('The parameter for this MCI command must be an
integer value.');
MCIERR_NO_WINDOW :writeln('There is no display window.');
MCIERR_NONAPPLICABLE_FUNCTION :writeln('The specified MCI command sequence
cannot be performed in the given order. Correct the command sequence; then,
try again.');
MCIERR_NULL_PARAMETER_BLOCK :writeln('A null parameter block (structure) was
passed to MCI.');
MCIERR_OUT_OF_MEMORY :writeln('Your system does not have enough memory for
this task. Quit one or more applications to increase the available memory,
then, try to perform the task again.');
MCIERR_OUTOFRANGE :writeln('The specified parameter value is out of range
for the specified MCI command.');
MCIERR_SET_CD :writeln('The specified file or MCI device is inaccessible
because the application cannot change directories.');
MCIERR_SET_DRIVE :writeln('The specified file or MCI device is inaccessible
because the application cannot change drives.');
MCIERR_UNNAMED_RESOURCE :writeln('You cannot store an unnamed file. Specify
a filename.');
MCIERR_UNRECOGNIZED_COMMAND :writeln('The driver cannot recognize the
specified command.');
MCIERR_UNSUPPORTED_FUNCTION :writeln(' Unsupported function');
 else writeln('unknownerror');
  end;
 result:='';
 end;
end;
Michael Van Canneyt
to Jean-Marc Chourot
Jean-Marc Chourot wrote 17 lines
Hi all, Could someone help to understand what happens with this piece of code : When I call the following function, I very very often receive an error :MCIERR_PARAM_OVERFLOW: writeln(err,' The output string was not long enough.'); Does anybody know why ? why is the pchar too small ? thx for help JM function SendMCIString2(cmd :PChar) :pchar; var x: hwnd; a:pchar ; l:integer; err:dword; begin err:= mciSendString(cmd, a, Sizeof(a), x);

This is definitely wrong, sizeof(a) is the size of the pointer a = 4.

Normally, based on my experience with the windows APIs, I would also expect that you must allocate a buffer, and have 'a' point to it.

So something like
   bufSize:=1024;
   a:=getmem(bufsize);
   err:= mciSendString(cmd, a, bufsize, x);

But that is just a guess, I don't know what mcisendstring is supposed to do.

Michael.

Show quoted text 130 lines
if err=0 then result:= a else begin case err of MCIERR_BAD_CONSTANT: writeln('The value specified for a parameter is unknown.'); MCIERR_BAD_INTEGER:writeln(' An integer in the command was invalid or missing.'); MCIERR_DUPLICATE_FLAGS: writeln('A flag or value was specified twice.'); MCIERR_MISSING_COMMAND_STRING:writeln(' No command was specified.'); MCIERR_MISSING_DEVICE_NAME:writeln(' No device name was specified. '); MCIERR_MISSING_STRING_ARGUMENT:writeln(' A string value was missing from the command.'); MCIERR_NEW_REQUIRES_ALIAS:writeln(' An alias must be used with the "new" device name.'); MCIERR_NO_CLOSING_QUOTE: writeln('A closing quotation mark is missing.'); MCIERR_NOTIFY_ON_AUTO_OPEN :writeln('The "notify" flag is illegal with auto-open.'); MCIERR_PARAM_OVERFLOW: writeln(err,' The output string was not long enough.'); MCIERR_PARSER_INTERNAL:writeln(' An internal parser error occurred.'); MCIERR_UNRECOGNIZED_KEYWORD:writeln(' An unknown command parameter was specified.'); MCIERR_BAD_TIME_FORMAT:writeln(' The specified value for the time format is invalid.') ; MCIERR_CANNOT_LOAD_DRIVER:writeln(' The specified device driver will not load properly.'); MCIERR_CANNOT_USE_ALL:writeln(' The device name "all" is not allowed for this command.') ; MCIERR_CREATEWINDOW :writeln('Could not create or use window.'); MCIERR_DEVICE_LENGTH:writeln(' The device or driver name is too long. Specify a device or driver name that is less than 79 characters.'); MCIERR_DEVICE_LOCKED:writeln(' The device is now being closed. Wait a few seconds, then try again.'); MCIERR_DEVICE_NOT_INSTALLED:writeln(' The specified device is not installed on the system. Use the Drivers option from the Control Panel to install the device.'); MCIERR_DEVICE_NOT_READY:writeln(' The device driver is not ready.'); MCIERR_DEVICE_OPEN :writeln('The device name is already used as an alias by this application. Use a unique alias.'); MCIERR_DEVICE_ORD_LENGTH:writeln(' The device or driver name is too long. Specify a device or driver name that is less than 79 characters.'); MCIERR_DEVICE_TYPE_REQUIRED:writeln(' The specified device cannot be found on the system. Check that the device is installed and the device name is spelled correctly.'); MCIERR_DRIVER:writeln(' The device driver exhibits a problem. Check with the device manufacturer about obtaining a new driver.'); MCIERR_DRIVER_INTERNAL:writeln(' The device driver exhibits a problem. Check with the device manufacturer about obtaining a new driver.'); MCIERR_DUPLICATE_ALIAS:writeln(' The specified alias is already used in this application. Use a unique alias.'); MCIERR_EXTENSION_NOT_FOUND :writeln('The specified extension has no device type associated with it. Specify a device type.'); MCIERR_EXTRA_CHARACTERS :writeln('You must enclose a string with quotation marks; characters following the closing quotation mark are not valid.'); MCIERR_FILE_NOT_FOUND :writeln('The requested file was not found. Check that the path and filename are correct.'); MCIERR_FILE_NOT_SAVED :writeln('The file was not saved. Make sure your system has sufficient disk space or has an intact network connection.'); MCIERR_FILE_READ :writeln('A read from the file failed. Make sure the file is present on your system or that your system has an intact network connection.'); MCIERR_FILE_WRITE:writeln(' A write to the file failed. Make sure your system has sufficient disk space or has an intact network connection.'); MCIERR_FILENAME_REQUIRED :writeln('The filename is invalid. Make sure the filename is no longer than eight characters, followed by a period and an extension.'); MCIERR_FLAGS_NOT_COMPATIBLE :writeln('The specified parameters cannot be used together.'); MCIERR_GET_CD :writeln('The requested file OR MCI device was not found. Try changing directories or restarting your system.'); MCIERR_HARDWARE :writeln('The specified device exhibits a problem. Check that the device is working correctly or contact the device manufacturer.'); MCIERR_ILLEGAL_FOR_AUTO_OPEN :writeln('MCI will not perform the specified command on an automatically opened device. Wait until the device is closed, then try to perform the command.'); MCIERR_INTERNAL :writeln('A problem occurred in initializing MCI. Try restarting the Windows operating system.'); MCIERR_INVALID_DEVICE_ID:writeln(' Invalid device ID. Use the ID given to the device when the device was opened.'); MCIERR_INVALID_DEVICE_NAME :writeln('The specified device is not open nor recognized by MCI.'); MCIERR_INVALID_FILE:writeln(' The specified file cannot be played on the specified MCI device. The file may be corrupt or may use an incorrect file format.'); MCIERR_MISSING_PARAMETER:writeln(' The specified command requires a parameter, which you must supply.'); MCIERR_MULTIPLE:writeln(' Errors occurred in more than one device. Specify each command and device separately to identify the devices causing the errors.'); MCIERR_MUST_USE_SHAREABLE :writeln('The device driver is already in use. You must specify the "shareable" parameter with each open command to share the device.'); MCIERR_NO_ELEMENT_ALLOWED:writeln(' The specified device does not use a filename.'); MCIERR_NO_INTEGER :writeln('The parameter for this MCI command must be an integer value.'); MCIERR_NO_WINDOW :writeln('There is no display window.'); MCIERR_NONAPPLICABLE_FUNCTION :writeln('The specified MCI command sequence cannot be performed in the given order. Correct the command sequence; then, try again.'); MCIERR_NULL_PARAMETER_BLOCK :writeln('A null parameter block (structure) was passed to MCI.'); MCIERR_OUT_OF_MEMORY :writeln('Your system does not have enough memory for this task. Quit one or more applications to increase the available memory, then, try to perform the task again.'); MCIERR_OUTOFRANGE :writeln('The specified parameter value is out of range for the specified MCI command.'); MCIERR_SET_CD :writeln('The specified file or MCI device is inaccessible because the application cannot change directories.'); MCIERR_SET_DRIVE :writeln('The specified file or MCI device is inaccessible because the application cannot change drives.'); MCIERR_UNNAMED_RESOURCE :writeln('You cannot store an unnamed file. Specify a filename.'); MCIERR_UNRECOGNIZED_COMMAND :writeln('The driver cannot recognize the specified command.'); MCIERR_UNSUPPORTED_FUNCTION :writeln(' Unsupported function'); else writeln('unknownerror'); end; result:=''; end; end; _______________________________________________ fpc-pascal maillist - http://lists.freepascal.org/mailman/listinfo/fpc-pascal