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!