i'm trying to set the serial port.(XP SP2, Visual Studio 2005). I use
the example code from MSDN "configuring a communications resource".
"ERROR_INVALID_PARAMETER The parameter is incorrect. "
read/write through it.
On Wednesday, April 16, 2008 9:40 PM uvbaz wrote:
On 14 Apr., 17:01, "Scott McPhillips [MVP]" <org-dot-mvps-at-scottmcp>
wrote:
Sorry, i forgot to paste them.
int main(int argc, char *argv[])
{
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
char *pcCommPort = "COM1";
hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n", GetLastError());
return (1);
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
return (2);
}
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_57600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n", GetLastError());
return (3);
}
printf ("Serial port %s successfully reconfigured.\n", pcCommPort);
return (0);
}
On Sunday, April 20, 2008 7:41 PM Joseph M. Newcomer wrote:
I presume there was some actual code that caused this error. How are we expected to offer
advice if you don't show the code that failed?
joe
On Mon, 14 Apr 2008 05:59:56 -0700 (PDT), uvbaz <uvbaz@stud.uni-karlsruhe.de> wrote:
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
On Sunday, April 20, 2008 7:47 PM Joseph M. Newcomer wrote:
See below...
On Tue, 15 Apr 2008 01:08:30 -0700 (PDT), uvbaz <uvbaz@stud.uni-karlsruhe.de> wrote:
****
int _tmain(int argc _TCHAR * argv[])
****
****
First, why are you using an obsolete data type like 'char'? Why are you declaring a
variable at all?
The correct code would at the very least be
LPTSTR CommPort = _T("COM1");
but that is not really general; the correct name is actually
_T("\\\\.\\COM1")
because the string you use is only good for COM1..COM9, and fails utterly with COM10.
****
****
Which is only one of about a dozen possible values you could use here; why single out
FILE_FLAG_OVERLAPPED as being the only flag of meaning?
****
*****
Did you actually READ THE DOCUMENTATION about DCB? Error 87 is EXACTLY the correct
response; you failed to initialize the first element, the DCBlength field. This could be
done by writing
DCB dcb = { sizeof(DCB) };
or by explicitly assigning the lenght. The error code is correct; you provided an invalid
parameter!
joe
*****
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm