Multimedia Timer
-
Neuer Thread neuer Versuch

Hab folgendes Problem. Hab mir den Multimedia Timer rausgesucht und auch ohne zu viele Fehlermeldungen in mein Programm integriert:
void CALLBACK SetSignal(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) { CSchrittmotorDlg* obj = (CSchrittmotorDlg*) dwUser; obj->OnTimer(uID); } void CSchrittmotorDlg::OnBnClickedStart() { TIMECAPS tc; timeGetDevCaps(&tc, sizeof(TIMECAPS)); DWORD resolution = min(max(tc.wPeriodMin, 0), tc.wPeriodMax); timeBeginPeriod(resolution); timeSetEvent(10, resolution, SetSignal, (DWORD)this, TIME_PERIODIC); } void CSchrittmotorDlg::OnBnClickedStop() { // KillTimer(IDC_LOOPTIME); timeKillEvent(1); timeEndPeriod (10); } void CSchrittmotorDlg::OnTimer(UINT_PTR nIDEvent) { //Kommt noch was wenns mal klappt CDialog::OnTimer(nIDEvent); }Hab die entsprechende Lib und Hedaer eingebunden.
So nun bekomm ich Fehlermldungen wie diese
error C3867: "CSchrittmotorDlg::SetSignal": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CSchrittmotorDlg::SetSignal", um einen Zeiger auf den Member zu erstellen.
Hab auch schon probiert mit dem &CSchrit..... aber wenn ich das mache jammert er rum, dass er es nicht konvertieren kann
error C2664: 'timeSetEvent': Konvertierung des Parameters 3 von 'void (__stdcall CSchrittmotorDlg:: )(UINT,UINT,DWORD,DWORD,DWORD)' in 'LPTIMECALLBACK' nicht möglich
Es gibt keinen Kontext, in dem diese Konvertierung möglich ist*was mach ich falsch? Diesen Code hab ich mi im Tutorial con CodeProjct geholt.
Bitte um hilfe! Danke
-
Callback-Mechanismen funktionieren (fast) nie mit Methodenzeigern - da benötigst du statische Methoden oder globale Funktionen.
(zum Ausgleich bekommt eine "normale" Callback-Funktion einen LPVOID-Parameter mitgegeben, den du im Programm festlegen kannst:static void CALLBACK SetSignal(LPVOID pdata,...) { CSchrittMotorDlg* pthis = static_cast<CSchrittmotorDlg*>(pdata); ... }
-
so endlich bin ich mal dazu gekommen, es auszuprobieren. Leider mit dem Selben Ergebnis wie vorher. Der selbe Fehler, die selbe alte leier. Hab ich vielleicht irgendwo, irgendwas vergessen?
Hab die Mmsystem.h und Winmm.lib eingebunden und den Code aus dem Code-Projekt-Bsp. übernommen