On Wed, 3 Aug 2005, Jean-Marc Chourot wrote:
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.
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 - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal