|
Hi,
I am using "USB to serial port converter" to program my
USB port.As soon as the USB cable is plugged-in the driver
installed allocates a COM port number to the USB Port.
Usually the last allocated port number is for USB.In my
program when the user opts for communiocation over USB
port i will find all the valid ports in the pc and assume
the last port number as the USB port number.If the USB cable
is not connected then no COM Port number is allocated to USB
port.So the method i am using to find out the COM port number
allocatted USB port is not robust method. So i just want to
know whether there is any method to find out the USB cable
connected to the USB port through VC++ code.
Thanks
|
|
|
|
|
You should not need to know if it is attached to a USB port. The user should know if they are connecting to the correct port. If the equipment attached to the port needs to be of a particular type, then the equipment must be able to answer a query so that I can say "yeh, it is me".
Forget this last allocated port stuff, it does not matter.
INTP
Every thing is relative...
|
|
|
|
|
Hi, I couldn't tell which forum to post this in, so I hope I got the right one!
Basically I'm creating an app where the entire thing is controlled by scripts. I want to be able to create a window on-the-fly, with controls added via scripting. The problem is I'm also trying to do it in MFC.
I've had a look at the message map, and realised it's static, so even if i could hack into it and change some entries dynamically, I'd still have to create a different class for each different window, which is not what i want.
I've also had a look at overriding the WindowProc() function in my dialog, and dispatching WM_PAINT, WM_NCPAINT, and WM_DRAWITEM messages to my list of controls. Although this seems the most promising approach, the controls don't draw. (The OnPaint() handlers ARE called successfully though.) I usually wouldnt just die there and post on a forum but i actually have no idea how to debug this!
Any help would be MUCH appreciated!
James Molloy
|
|
|
|
|
Hi,
it is possible to do this even in MFC but it will cost a lot of programming
depending on how much you you would like to add dynamicaly but this is the
priciple.
You can add control dynamicaly to a window or say an empty dialog by the following code.
Step 1:
Add in the main class a pointer to a CBUTTON
class CMyDlg
{
...
CButton* m_pButton;
}; Add in the implementation the following code:
BOOL CMyDlg::OnInitDialog()
{
...
CRect rtWnd(10,10,210,32);
m_pButton = new CButton();
m_pButton->Create(_T("Test"), BS_PUSHBUTTON | WS_VISIBLE, rtWnd, this, 1000);
return TRUE;
} The 1000 is the ID of the control that is known by the dialog and should be unique.
This will add a button, and you can control the button later by the m_pButton object.
Step 2: the Click event
Normaly the wizard would add the following code to implement this
ON_BN_CLICKED(IDC_BUTTON1, &CWndScriptDlg::OnBnClickedButton) where IDC_BUTTON1
is the id of the button that has been pushed. This is like you said static and no use to us.
But there is a macro that fits oure needs: ON_CONTROL_RANGE . This is how we must use it:
Add the function header in the class:
class CMyDlg
{
...
CButton* m_pButton;
afx_msg void OnButtonClicked(UINT uiDlgCtrlId);
}; and add in the message map the MACRO
BEGIN_MESSAGE_MAP
...
ON_CONTROL_RANGE(BN_CLICKED,1000,1099,&CWndScriptDlg::OnButtonClicked)
END_MESSAGE_MAP() Then add the implemantation of the function
void CWndScriptDlg::OnButtonClicked(UINT uiDlgCtrlId)
{
AfxMessageBox(_T("Hello"));
} The range from 1000 to 1099 is the range we have reserved for CBUTTON this
allows to add 100 buttons to the dialog. The BN_CLICKED is the event we want to link
to the function. The UINT uiDlgCtrlId gives us the id of the control that has been clicked.
Step 3: Getting data from the controls
We can alsoo use DDX to get data from the controls.
Lets add a CEdit to our dialog
class CMyDlg
{
...
CButton* m_pButton;
CEdit* m_pEdit;
afx_msg void OnButtonClicked(UINT uiDlgCtrlId);
}; create it in the InitDialog function
BOOL CMyDlg::OnInitDialog()
{
...
CRect rtWnd(10,10,210,32);
m_pButton = new CButton();
m_pButton->Create(_T("Test"), BS_PUSHBUTTON | WS_VISIBLE, rtWnd, this, 1000);
rtWnd = CRect(10,110,210,130);
m_pEdit = new CEdit();
m_pEdit->Create(WS_BORDER | WS_VISIBLE, rtWnd, this, 1101);
m_pEdit->SetFont(GetFont());
return TRUE;
} Now we can use the control by DDX, but we can't use UpdateData to transfer the data to our variables. We must call the DDX functions directly:
void CWndScriptDlg::OnButtonClicked(UINT uiDlgCtrlId)
{
int iValue = 0;
CDataExchange dx(this, true);
DDX_Text(&dx, m_pEdit->GetDlgCtrlID(), iValue);
iValue += 2;
dx.m_bSaveAndValidate = false;
DDX_Text(&dx, m_pEdit->GetDlgCtrlID(), iValue);
}
This allows you to add dynamicaly controls to your window, and work with them.
I hope that this helps you to create what you need.
Merry Xmas and a Happy New Year
Kurt Pattyn
codito ergo sum
|
|
|
|
|
Guys how can i declare a varible of type char and then later in my program set the size of the char buffer to suite the size of the file being read into the buffer? C++
|
|
|
|
|
LPTSTR pszFileText;
DWORD dwFileSize;
dwFileSize = ::GetFileSize(hFile, NULL);
if(dwFileSize != INVALID_FILE_SIZE)
{
LPTSTR pszFileText;
HGLOBAL hGlobal = ::GlobalAlloc(GPTR, dwFileSize + 1);
pszFileText = (LPTSTR)::GlobalLock(hGlobal);
if(pszFileText != NULL)
{
DWORD dwRead;
if(::ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
;
}
::GlobalUnlock(hGlobal);
::GlobalFree(hGlobal);
}
Jesus Loves You and Me <marquee direction="up" height="50" scrolldelay="1" step="1" scrollamount="1" style="background-color:'#44ccff'">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
|
|
|
|
|
char *p;
latter calculate how much memory you want,
p = (char*) malloc(size);
-Prakash
|
|
|
|
|
char* buffer;
int fileSize = WhateverToGetFileSize();
buffer = new char[fileSize];
DoStuffWithBuffer(buffer);
delete[] buffer;
|
|
|
|
|
Hi,
The small experience that I have with VC++ is not enough to figure out how to run a process and to be able still to use another application.
I appreciate any help.
tony
|
|
|
|
|
You can put the application in the background by creating a hidden window or no window at all.
But what is that you want to do with other application?
-Prakash
|
|
|
|
|
Hi,
I want to do data acquisition and plotting of obtained values and in the same time to use Internet Explorer, for example.
Tony
|
|
|
|
|
Does not seem to be too difficult to do , but then I dont know the entire design of your project, Probably i would design in a different way for more efficiency.
so you have 2 components,
1. background app (to aquire the data)
2. The plotter , background app calls this??
3. IE. Called for what ? to get some data or to show some data or to make the user see some website?
There are lot of things to consider before anyone (atleast me) could give you a solution.
-Prakash
|
|
|
|
|
Hi Prakash,
Yes, points one and two are right. IE was just an example, it could be for example, Origin, where the user wants to analize some data. I use MFC, additional Dialog, where the user enters some parameters and botton to start the data acquisition. After this moment, there is now way to be used any other program on the computer.
Tony
|
|
|
|
|
The background application can do the data acquisition and store it in some file as appropriate to you,
So whenever you start up the plotter the plotter will read the data from the file and plot it periodically say every 1 sec or 5 sec, or what is ur design is.
Who will start the 3rd application??!? The background app or the plotter?
-Prakash
|
|
|
|
|
The background application does the data acquisition, and plots each data point, also stores the data in a file.
The design is: measure, plot, measure, plot...
Every time clear and redraw with the new point.
GDI+ is used for plotting
The 3rd application is started from the user.
Just the measuring application shouldn’t be dominant and should allow other applications to run.
|
|
|
|
|
Tonichka wrote: The background application does the data acquisition, and plots each data point, also stores the data in a file.
The design is: measure, plot, measure, plot...
Every time clear and redraw with the new point.
GDI+ is used for plotting
The 3rd application is started from the user.
Just the measuring application shouldn’t be dominant and should allow other applications to run.
Ok you have all the design, now where exactly is the problem?
-Prakash
|
|
|
|
|
The problem is that, 3rd application can not start. The Windows freezes till the measuring is ended.
|
|
|
|
|
Sounds to me like you have your data acquisition process running with very high priority and very frequently. Those two attributes do not give time for the 3rd application to do anything.
How are you doing your data acquisition and plotting? I am guessing that your data acquisition is the bottle neck. Where is your data coming from? Are you polling some input, like the parallel port, for onesample at a time, or are you processing an interrupt to pull in a buffer of samples? The first solution will use more processor time than the second, and if you sample rate and bits per sample are high, you can block out most other processes.
|
|
|
|
|
The data is coming from an ampere meter and the communication is through a GPIB. The application waits for a service request and reads the value. Unfortunately, I can not use the buffer of the device, in order to reduce the reading frequency. There are involved other devices and synchronization between them which doesn’t allow it.
|
|
|
|
|
So you have two applications:
1) Uses the GPIB interface to get samples of the current.
2) Plots data from the first application.
I think you have to look at your rate of interraction between the applications. For example, how often is APP1 getting the samples and how often is it sending those samples to APP2. If APP1 sends the data directly to APP2, each sample time, you may want to consider buffering your data in APP1 for a certain amount of time before sending the data to APP2.
Parallel Port Programming[^] is a book that describes some of the trade offs you need to consider for data acquisition using a PC.
|
|
|
|
|
Tonichka wrote: The problem is that, 3rd application can not start. The Windows freezes till the measuring is ended.
Try putting threads in your design. May be a seperate thread for data reading.
-Prakash
|
|
|
|
|
Does anyone know if there is any API to obtain the LocalServer32 from a CLSID, rather than querying explicitly in the registry?
thanks!
|
|
|
|
|
i had developed an aplication (vc++ 6.0).
its is ok and working,
but one of the client, had some problem with it
when is strarts executing, the system is getting hanged, and he need to
restart the system to get back to normal working condition
can any one guess and help me out in finding the problem
Thank in Advance
-- modified at 2:00 Friday 30th December, 2005
|
|
|
|
|
Its very minimal information. Can u briefly explain what exactly does ur application ?
|
|
|
|
|
It download files form olympus recoder and uploads to FTP
i had handled all the exceptions,
its working here with me fine,
and also with all the clients except one,
as soon as he started the application, system is struck up it seems
and he need to restart the system, even ATl+CLT+DEL is also not working on his system, if OS is differnet will be so, or can be any other reason
pls help me out
Thanks & Regrads
-- modified at 3:27 Friday 30th December, 2005
|
|
|
|
|