|
And here I thought is was a contraction from the Old English - 'Byte Me!'
|
|
|
|
|
Hi, could somebody help me?
In my C application, I try to communicate with CISCO's devices, such as router, swith. then once the connection is established, I can issue some commands to grab some data from the CISCO's device.
could somebody tell me how can I do this, and if CISCO has the related "API" that I can use ?
thanks a lot
dadsadasd
|
|
|
|
|
asv wrote:
could somebody tell me how can I do this, and if CISCO has the related "API" that I can use ?
Sounds interesting. Never thought of doing this but in order to communicate with a Cisco device you will need to visit Cisco’s web site. As memory serves they use their own variation of SNMP (simple network management protocol) although some of the more general commands should work.
Not much help I know but it (SNMP) gives you a starting point.
-------------------------------
|
|
|
|
|
You could do this with the Telnet protocol.
Blogless
|
|
|
|
|
Okay, didn’t even think of just opening a socket connection to the device to see what it would allow you to do.
Then again do you really want it set up so insecure? I mean telnet is after all clear text over the wire.
Interesting...
-------------------------------
|
|
|
|
|
sfdougl wrote:
Then again do you really want it set up so insecure? I mean telnet is after all clear text over the wire.
Could use SSH or secure telnet, but either way you can use 'show run' and parse the return string to hold all the cisco configuration, then issue "config t" and the parameter is question to set it's appriopiate value. There are web base solutions but all are very crude.
Blogless
|
|
|
|
|
|
hi folks,
here is my problem.
i have a member function of my dialog box called OnEditDateDay() that maps an EditBox Control EN_CHANGE (ON_EN_CHANGE(IDC_DATEDAY_EDIT, OnEditDateDay) ).
when i code the folowing function, it works well under Visual Studio 6, but not perfecty on VS2003.
it returns the cursor (current position where to write in the edit control) at the begining of the edit, each time i reach the 2 characters string length...
here is the code.
void CFactEditorDlg::OnEditDateDay() {
m_peDateDay->GetWindowText(m_strDateDay);
if ((m_strDateDay.GetLength() >= 2) && (m_peDateDay == GetFocus())) {
m_strDateDay = m_strDateDay.Left(2);
m_peDateDay->SetWindowText(m_strDateDay);
m_peDateMonth->SetSel(0, -1);
m_peDateMonth->SetFocus();
}
m_strDateText.Format("%s/%s/%s", m_strDateDay, m_strDateMonth, m_strDateYear);
m_ptDate->SetWindowText(m_strDateText);
}
i really cannot understand why this...
i give up.
any idea or questions ?
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
I am going to guess that is because when when you reach 2 charcters in length you then call SetWindowText on the edit control, which causes OnEditDateDay to be called again.
|
|
|
|
|
so why doesn't it do this under visual C++ 6 ?
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
Blind luck! You are just ASKING for recursion to occur using SetWindowText on an EN_CHANGE message. A different user recently had a post here with a similar problem, and he DID suffer the recursion.
|
|
|
|
|
i'm not sure i understand you.
you mean SetWindowPos() "re-raises" the EN_CHANGE event ?
I thought to something like that already, but as it didn't do it under VC++6...
is it a new feature of MFC 7 ?
is there a way to work around this ?
thanks,
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
I said the SetWindowText() causes a regeneration of the EN_CHANGE message.
After all, you did CHANGE the text when you made the call to the SetWindowText(), which results in EN_CHANGE, which within you call SetWindowText() which results in EN_CHANGE, within which you call SetWindowText()... and so on and so on and so on....
It was not written to detect if it is the SAME text or not.
|
|
|
|
|
... BUT it worked great on VC++ 6 !!!!!! did you notice that point ???????
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
Yes, I did. I am just implying that INHERENTLY your deisng is flawed. You could put in a blocker variable so you don't reenter your own function and that might help. Then you won't be dependent upon the whims of the development platform
|
|
|
|
|
ok blake,
here is the new code :
void CFactEditorDlg::OnEditDateDay() {
static bAlreadyIn = false;
if (!bAlreadyIn) {
bAlreadyIn = true;
m_peDateDay->GetWindowText(m_strDateDay);
if ((m_strDateDay.GetLength() >= 2) && (m_peDateDay == GetFocus())) {
m_strDateDay = m_strDateDay.Left(2);
m_peDateDay->SetWindowText(m_strDateDay);
m_peDateMonth->SetSel(0, -1);
m_peDateMonth->SetFocus();
}
m_strDateText.Format("%s/%s/%s", m_strDateDay, m_strDateMonth, m_strDateYear);
m_ptDate->SetWindowText(m_strDateText);
bAlreadyIn = false;
}
}
it seems to work quite fine now...
but it still don't understand why it behaves like this only under VC++7...
thanks anyway
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
Hi, does anyone know how to use RLC? Can xplain how it is use? Can it be use to compress a DICOM image into a smaller file size? The purpose of reducing the size is to save space. Can it be done? Please help. Thank you.
|
|
|
|
|
|
In VC++ 6.0 in "ResourceView tab->Version" we find four places where version number has to be changed.
1. FILEVERSION
2. PRODUCTVERSION
and
3. FileVersion
4. ProductVersion
Initially the version number in all these four places will be
1,0,0,1. Now our client requirement is to add intermediate version number i.e. fifth digit (e.g. 1,0,0,1, I2).
I am able to add at "FileVersion" and "ProductVersion" but "FILEVERSON" and "PRODUCTVERSION" are not accepting the fifth digit.
Any solution in this regards will be highly appreciated.
Thanks & Regards,
Neeraj
|
|
|
|
|
There are only four defined places for digits.
The one place you can add stuff all day is to the version information that is stored as a string (FileVersion and ProductVersion).
The one that is a number is only treated as the two WORDS of two DWORDS. So you only get four numbers possible for each of FILEVERSION and PRODUCTVERSION.
What you might consider doing, assuming you don't have 'hundreds' of patches and more than 9 service packs, is to use the lower number as a build identifier and then for the third number use the 10's digits as a patch number and the hundreds or thousands place as a service pack indicator.
For example, 7.11.1.3452
would mean product version 7.11, patch 1, build 3452
7.11.201.35
would mean product version 7.11 service pack 2 patch 1 build 35
7.5.434.99
would mean product version 7.5 service pack 4 patch 34 build 99
This works well with version checking tools as well, because all numebrs are constantly increasing.
Some scheme similar to this might help you out.
|
|
|
|
|
Thanks miller.
I would try with the solution you have provided.
thanx again.
Thanks & Regards,
Neeraj
|
|
|
|
|
I am trying to make an array of function pointers in C++. I have done it sucessfully in C, but I am having a problem with the arrays not giving defined correctly. Syntactically they are correct (or at least according to the compiler they are), but when it comes time to call the function, the arrays show that they are not defined with the functions that i am putting in the arrays.
Here is the declaration for both of my function pointer arrays that are public members of my "CDialog" class in my dialog.h file:
void (*functionarray1[48])();
void (*functionarray2[160])();
That file also houses the declarations for all of the functions I will use with the arrays.
Next I define the 2 arrays in my dialog.cpp file:
void (CDialog::*functionarray1[48])() = {CDialog::function1,CDialog::function2};
void (CDialog::*functionarray2[160])() = {CDialog::function3,CDialog::function4};
So according to this function1 should be in functionarray1[0]. function2 in functionarray1[1], etc... but at runtime when i run a debug the array never gets filled and I get an assertion error
Here is the code to call the function pointer based on an unknown offset value between 00h and 9Fh in "insptr":
CDialog FuncPtr;
UINT insptr = (INSNum / 2);
(FuncPtr.functionarray1[insptr])(); <-----------------
The assertion error happens when the line pointed to executes.
I took this syntax from a paper on C++ array of function pointers
if anyone can help, I'd really appreciate it.
|
|
|
|
|
you should call the functions like
assign the address of the function like:
void (CDlg::*functionarray1[48])() = { &CDlg::function1, &CDlg::function2 };<br />
and call them like:
(FuncPtr.*(functionarray1[insptr]))();<br />
I think that should do it...
Offcourse you should be mindfull to call functions on a CDialog object which has not yet been created (does not have a valid HWND member).
Greetings,
Davy
|
|
|
|
|
it is not as GDavy suggested (the & operator is not necessary when assigneing function addresses, as the name of a function is already its address).
i'd suggest you better assign an instance of the function instead of its name...
i doubt you have a CDialog::function1 in your code...
but if you have a CDialog object instanced (let's say dlg ), then you could pass dlg.Function1 .
better like this ?
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
toxcct wrote:
it is not as GDavy suggested (the & operator is not necessary when assigneing function addresses, as the name of a function is already its address).
According to ANSI C++[^]it is! VS 2005 even requires it..
Behind every great black man...
... is the police. - Conspiracy brother
Blog[^]
|
|
|
|