|
This is the code i found from codeguru.
The URL is as below
www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c5395
please do take some time to look at the code
|
|
|
|
|
Doesn't Cedric's answer satisfy your query ?
l_d wrote: www.codeguru.com/Cpp/I-N/network/serialcommunications/article.php/c5395
Are you talking about this function ?
BOOL CSerialPort::WriteByte(BYTE bybyte)
{
iBytesWritten=0;
if(WriteFile(hComm,&bybyte,1,&iBytesWritten,NULL)==0)
return false;
else return true;
}
If you want to use DWORD, you need to modify it to,
BOOL CSerialPort::WriteByte(DWORD dWord)
{
iBytesWritten=0;
if(WriteFile(hComm,&dWord,sizeof(DWORD),&iBytesWritten,NULL)==0)
return false;
else return true;
}
-- modified at 4:01 Friday 23rd February, 2007
Corrected typo.
|
|
|
|
|
Well, that's a solution but it is not very convenient to modify the function so that it can support everything you want to transmit .
I looked at the article but I don't really see the added value of it. Yes, of course, it is perfect when you want to send bytes but when you have more complex datatypes then it becomes a pain in the sense that you need to use masks and bit shifting
|
|
|
|
|
thanks for Prasad& you for looking at the article.I understood what u both meant and modified but even then when i am reading back the value in that edit box i am getting garbage value.
can anyone please suggest me any other method when i want to send very large values that too many values if possible in an array accepting from different edit boxes.
|
|
|
|
|
Well, if you modified the code accordingly to what prasad said, you need of course to do the same for the Read function (so that it can read DWORD and not bytes).
|
|
|
|
|
Actually, I dont wanted to read the article, as it was to much for me to read whole article, because OP dont want to paste relevent code.
So I looked in to WriteFile part of article and give him suggestion.
|
|
|
|
|
Yes sure the same for me. In fact the post was not intended as a 'rant' to you but more to the article itself. That's not very flexible to only be able to send bytes. It would have been much more convenient to be able to send a buffer (if the buffer size is 1, then you only send one byte).
|
|
|
|
|
To write data to a serial port, you provide tha address of a buffer and the size of data to transmit. So if you want to send your DWORD, you simply need to do this:
DWORD dwMydata = 61118792;
WriteFile(...., &dwMyData, sizeof(DWORD), ....);
|
|
|
|
|
how to write a merge sort program using COM?
|
|
|
|
|
How it is related to COM ? COM is not a language. Have search on internet for same ?
|
|
|
|
|
meet_kirankumar wrote: how to write a merge sort
Here[^] is an example.
meet_kirankumar wrote: using COM
Write a MergeSort function or class then call it.
|
|
|
|
|
Hi,
I need to change the background color of a CStaic control to white color.
How can i do this ?
Thanks.
|
|
|
|
|
Handle WM_CTLCOLOR
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkColor(RGB(255,255,255));
}
return hbr;
}
|
|
|
|
|
Hi,
I tried this. But that is not changing all pixels of CStatic window. This changes only the text background color of CStatic window.
I need to change the color of whole CStatic window.
Thanks.
|
|
|
|
|
You said in your OP, you want change background color of CStatic.
Try this code,
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
hbr = CreateSolidBrush(RGB(255,255,255));
}
return hbr;
}
|
|
|
|
|
|
C an any body tell me how 2 create frames in VC++ with buttons in detail prosedure.
|
|
|
|
|
Are asking this with respect to MFC or SDK?
|
|
|
|
|
Hi, I have a dialog box which has vertical scroll style enabled. The problem is, when i pull the scroll button down the controls in the dialog box move down. But when i pull the scroll button up the controls does not move up. The code which i have used is listed below
void CMyPropertyDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
SetScrollPos( SB_VERT , nPos , TRUE ) ;
ScrollWindow( 0 , GetScrollPos( SB_VERT ) ) ;
}
please help
-- modified at 0:03 Friday 23rd February, 2007
|
|
|
|
|
The second parameter for ScrollWindow, yAmount must be a negative value to scroll up.
My idea is to take a member var which stores the previous pos, compare to see the direction and write code accordingly.
HTH,
Murali Krishna
|
|
|
|
|
Hi all, this is my first message. i want to configure system timer for say 1msec exact, how to achive the perfact timing requirement in VC++, i have to transmit some message at every 1msec, at serial port. can anyone suggest how to do this.
|
|
|
|
|
|
Your link is broken.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
shriram_ch wrote: i have to transmit some message at every 1msec, at serial port
I'm almost positive that you can't possibly send discreet messages this fast, especially over a COM port. Your control code will need time to execute, and we're talking at least 3ms just to iterate the loop and send the message.
shriram_ch wrote: i want to configure system timer for say 1msec exact, how to achive the perfact timing requirement in VC++
Since the Sleep() function doesn't have that kind of granularity (depending on the platform, the best you can get out of it is about 25ms), you're going to need a higher-resolution timer.
There are a couple of articles here on CP that talk about high resolution timers.
http://www.codeproject.com/cpp/precisetimer.asp[^]
http://www.codeproject.com/datetime/perftimer.asp[^]
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
You probably won't be able to get 1ms regardless of what you use in Windows - it's not a RTOS.
You may want to look at the Waitable Timer API:
http://msdn2.microsoft.com/en-us/library/ms687012.aspx[^]
e.g.
- Create a watiable timer:
HANDLE TimerHnd = CreateWaitableTimer(NULL, FALSE, NULL);
- Create a job thread
- start loop
- WaitForSingleObject(TimerHnd, INFINITE);
- send message on serial port
- continue loop
- Set the waitable timer
SetWaitableTimer(TimerHnd, &due, 1, NULL, NULL, FALSE);
...
- Kill timer: (due = 0)
SetWaitableTimer(TimerHnd, &due, 0, NULL, NULL, FALSE);
CancelWaitableTimer(TimerHnd);
- Tell thread to exit, wait for it to exit
- CloseHandle(TimerHnd);
...cmk
Save the whales - collect the whole set
|
|
|
|