Callback | Funktionspointer

Kilian1312

Grünschnabel
Hallo liebe Community,

ich hab ein Problem und zwar schaff ich es seit 3 Tagen nicht die Speicheradresse einer Membermethode als Parameter einer anderen Funktion zu übergeben

Importing() -> in static_clPlot
| ruft LoadFile(&FileName_, *pProcAdr_) -> in CLogObj auf
| ruft LoadFile(&Filename_) -> in CLogObj auf
| ruft DecodeBuffer(&TsError) -> in CLogObj auf
v
ruft ExportBuffer(pObj, &TsError)

Code:
static_clPlot.h
Class static_clPlot
{
public:
  	bool	ExportBuffer(RECORD_TYPE *pObj, BOOL *TsError);



private:

	BOOL	 Importing();

}


static_clPlot.cpp
BOOL static_clPlot::Importing()
{
        CLogObj *pLog;
	RECORD_TYPE *pObj;
        BOOL TsError;

                                                                   // Programmadresse hier als Parameter übergeben
        if ((LogObj.LoadFile((string)m_Log_File_Name, &********)!=0))
	{
                   .		
                   .
                   .
                   .
	}
        LogObj.SetRecordIdx(0);
	while ( (pObj = LogObj.GetNextRecord()) != NULL)
	{				

		Fehler = ExportBuffer(pObj, &TsError);

		if(m_pTaskDlg->CheckCancelButton())
		{
			break;
		}
		if ( Records_Read% SetModOp == 0)
		{
			m_pTaskDlg->SetPos(Records_Read);
		}
		Records_Read++;		

	}

}
CLogObj.h
class CLogObj
{
public:
            int          LoadFile       ( const string &FileName_ );
            int          LoadFile       ( const string &FileName_, void *pProcAdr_);
private:
            void* (CLogObj::*pProc)(RECORD_TYPE *pObj, bool *TsError);
            vector <RECORD_TYPE*> Records;
}

CLogObj.cpp        
     
CLogObj::CLogObj ( const string &FileName_ )
{
	pProc = NULL;
	
	LoadFile ( FileName_);
}

int CLogObj::LoadFile ( const string &FileName_, void *pProcAdr_ )
{
        //      FEHLER
	pProc = pProcAdr_;
	
	return ( LoadFile( FileName_) );
}       


int CLogObj::LoadFile ( const string &FileName_ )
{
	
	long loopCnt=0;
	while ( (!ImpFile.eof_) && !myBreak)
	{
		

		switch(impState)
		{
			.
 			.
			.
			.
				else
				{	
						if (checksum == SeqBuffer[SeqTotalLen])
						{
							.
							.
							.
 							Fehler = DecodeBuffer(&TsError);
						        .
					         }
				}
	        }

       if(Fehler)
	    break;

	// Close Files
	ImpFile.fclose_();
	
	return (retCode );
}

bool CLogObj::DecodeBuffer(bool *TsError)
{
	
	RECORD_TYPE RecObj;
	RECORD_TYPE *pObj;

	if (pProc == NULL)
	{
		pObj = new(RECORD_TYPE);
	}
	else
	{
		pObj = &RecObj;
	}
	pObj->Type = NO_TYPE;

	memcpy(pObj->RecBuf,SeqBuffer,SeqLen);

	switch(SeqBuffer[0])
	{
		case _T('K'):	
		case _T('k'):	
		{
				.
				.
				.
				.
				.

			if (SeqBuffer[0] == _T('k'))
			{
				if ((pObj->V.Value & 0x00800000) > 0)
					 pObj->V.Value |= 0xFF000000;
			}
			else
			{
				
				if ((pObj->V.Value & 0x00100000) > 0)
					 pObj->V.Value |= 0xFFE00000;
			}

			// Timestamp holen
			memcpy(&pObj->V.Ts,&SeqBuffer[6],4);
			
			break;
		}

		case _T('P'):	// Probe Data
		{
				.
				.
				.
				.
				.


		} // case 'P'

		case _T('O'):
		{
				.
				.
				.
				.
				.

			break;
		} // case 'P'

		case _T('T'):	
		{				.
				.
				.
				.
				.

		    break;
		}

		case _T('S'):	
		{
				.
				.
				.
				.
				.

			if (pObj->S.Unit[0] == ' ')
			{
				switch (Channel)
				{
					.
					.
					.
					.
					.
				}
			}

			break;
		}

		case _T('N'):	
		{
				.
				.
				.
				.
				.


		default :
		{
		}
	} // switch


	if (pProc == NULL)
	{
		if (pObj->Type == NO_TYPE)
		{
			delete(pObj);
		}
		else
		{
			Records.push_back(pObj);
		}
	}
	else
	{
		// Export Buffer mit Pointer aufrufen;
	}

	return(Error);
}

} // END CLASS  CLogObj

Vielen Dank im vorraus!!
 
Zuletzt bearbeitet:
Hi und Willkommen bei tutorials.de :)

Bitte das nächste Mal angeben, was passiert bzw. welche Fehlermeldungen kommen.

Das Problem mit einer Klassenfunktion ist, dass man die Klasse auch bräuchte,um sie aufrufen zu können.
Wenn du die Methode static machst, kannst du sie als Parameter übergeben.
Dafür musst du dann dafür sorgen, dass die static-Methode das betroffene Objekt auch bekommt.
 
Zurück