Z
zamir.khan
Hello all,
New to the groups, sorry if this the wrong forum/etiquette. I am coding
a c++ application that requires the use of a timer-triggered event
handler. I decided to use the timer provided in System::Timers::Timer.
My understanding of the next part is not very good, as my code may
reveal, but as I understand it, my application is "unmanaged C++",
whereas the timer extension from the system DLL is managed. Therefore I
needed to use the gcroot template to allow the inclusion of the
"managed" timer code.
NOTE: (1) extraneous code/includes have been left out for brevity
(2) I'm using Visual C++ Express Edition Beta
***************** CODE BEGINS **************
#include <vcclr.h>
#using <mscorlib.dll>
using namespace System;
#using <System.dll>
using namespace System::Timers;
class DataStream
{
public:
DataStream():m_N(48),m_saving(false)
{
// set up the window timer
m_Timer = gcnew Timer;
m_Timer->Elapsed += gcnew
ElapsedEventHandler(DataStream::nextCandle);
m_Timer->Interval= CANDLE_DURATION * 1000;
m_Timer->AutoReset= true;
m_Timer->Enabled=true;
}; // default constructor
private:
gcroot<Timer^> m_Timer; // use gcroot because can't use managed
object
in unmanaged class
void nextCandle(Object ^sender, ElapsedEventArgs ^e);
};
void DataStream::nextCandle(Object ^sender/*source*/, ElapsedEventArgs
^e/*e*/)
{
// do some stuff
}
**************CODE ENDS ************
Here's the problem, upon compilation, I get this error:
Compiling...
dataStream.cpp
c:\blah\dataStream.h(18) : error C3867: 'DataStream::nextCandle':
function call missing argument list; use '&DataStream::nextCandle' to
create a pointer to member
c:\blah\dataStream.h(18) : error C3350:
'System::Timers::ElapsedEventHandler' : a delegate constructor expects
2 argument(s)
At first, I didn't include the & reference suggested by the compiler
because most examples I had seen do not use this.
Upon inclusion, changing:
m_Timer->Elapsed += gcnew ElapsedEventHandler(DataStream::nextCandle);
to....
m_Timer->Elapsed += gcnew ElapsedEventHandler(&DataStream::nextCandle);
I get the following error on compilation:
c:\blah\dataStream.h(18) : error C3364:
'System::Timers::ElapsedEventHandler' : invalid argument for delegate
constructor; delegate target needs to be a pointer to a member function
So I'm stuck at this point. I'm not sure if the solution is a few small
changes away from where I am, or if these errors are indicative of a
larger problem (i.e. me using the gcroot template and mixing managed
and unmanaged code with zero experience in that).
Any help would be appreciated!!
Thank you!
New to the groups, sorry if this the wrong forum/etiquette. I am coding
a c++ application that requires the use of a timer-triggered event
handler. I decided to use the timer provided in System::Timers::Timer.
My understanding of the next part is not very good, as my code may
reveal, but as I understand it, my application is "unmanaged C++",
whereas the timer extension from the system DLL is managed. Therefore I
needed to use the gcroot template to allow the inclusion of the
"managed" timer code.
NOTE: (1) extraneous code/includes have been left out for brevity
(2) I'm using Visual C++ Express Edition Beta
***************** CODE BEGINS **************
#include <vcclr.h>
#using <mscorlib.dll>
using namespace System;
#using <System.dll>
using namespace System::Timers;
class DataStream
{
public:
DataStream():m_N(48),m_saving(false)
{
// set up the window timer
m_Timer = gcnew Timer;
m_Timer->Elapsed += gcnew
ElapsedEventHandler(DataStream::nextCandle);
m_Timer->Interval= CANDLE_DURATION * 1000;
m_Timer->AutoReset= true;
m_Timer->Enabled=true;
}; // default constructor
private:
gcroot<Timer^> m_Timer; // use gcroot because can't use managed
object
in unmanaged class
void nextCandle(Object ^sender, ElapsedEventArgs ^e);
};
void DataStream::nextCandle(Object ^sender/*source*/, ElapsedEventArgs
^e/*e*/)
{
// do some stuff
}
**************CODE ENDS ************
Here's the problem, upon compilation, I get this error:
Compiling...
dataStream.cpp
c:\blah\dataStream.h(18) : error C3867: 'DataStream::nextCandle':
function call missing argument list; use '&DataStream::nextCandle' to
create a pointer to member
c:\blah\dataStream.h(18) : error C3350:
'System::Timers::ElapsedEventHandler' : a delegate constructor expects
2 argument(s)
At first, I didn't include the & reference suggested by the compiler
because most examples I had seen do not use this.
Upon inclusion, changing:
m_Timer->Elapsed += gcnew ElapsedEventHandler(DataStream::nextCandle);
to....
m_Timer->Elapsed += gcnew ElapsedEventHandler(&DataStream::nextCandle);
I get the following error on compilation:
c:\blah\dataStream.h(18) : error C3364:
'System::Timers::ElapsedEventHandler' : invalid argument for delegate
constructor; delegate target needs to be a pointer to a member function
So I'm stuck at this point. I'm not sure if the solution is a few small
changes away from where I am, or if these errors are indicative of a
larger problem (i.e. me using the gcroot template and mixing managed
and unmanaged code with zero experience in that).
Any help would be appreciated!!
Thank you!