ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
198
198
EMPFEHLEN
-
19.08.11 18:19 #1
- Registriert seit
- Aug 2011
- Beiträge
- 1
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
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!!Geändert von Kilian1312 (19.08.11 um 18:54 Uhr)
-
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.
-
20.08.11 14:50 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Man darf Funktionszeiger nicht an einen void* zuweisen.
Ändere die Signatur der LoadFile Methode entsprechend.
Außerdem gilt das was sheel sagte.
\edit: siehe http://www.parashift.com/c++-faq-lit...o-members.html
GrußGeändert von deepthroat (20.08.11 um 14:59 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Funktionspointer in C
Von blackbirdthefirst im Forum C/C++Antworten: 8Letzter Beitrag: 07.08.06, 18:45 -
Funktionspointer
Von TimSz im Forum C/C++Antworten: 7Letzter Beitrag: 31.08.05, 22:26 -
Funktionspointer
Von Andreas Witt im Forum C/C++Antworten: 7Letzter Beitrag: 04.01.05, 16:12 -
Funktionspointer
Von HansKloss im Forum C/C++Antworten: 5Letzter Beitrag: 15.12.04, 11:14 -
Funktionspointer
Von Schtehffi im Forum C/C++Antworten: 1Letzter Beitrag: 30.03.04, 07:36





Zitieren

Login






