Timer in ActiveX funktioniert nicht
-
Hallo mit einander,
ich programmiere zurzeit mein erstes ActiveX-Steuerelement (CAN-Bus-Interface zur Einbindung in Matlab). Technisch funktioniert das Programm eigentlich sehr gut. Nur ein einfacher Timer bringt mich an die Grenze der Verzweifelung!
Zur genaueren erklärung:
Der Aufrauf von SetTimer oder KillTimer führt grundsätzlich zum Absturz des Programms. Da ich bei der ActiveX-Anwendung keine Debuginformationen erhalte kann ich leider die Ursache für den Fehler ncht ausmachen. Im Test-Container (tstcon32.exe) bekomme ich nur einen unbekannten Fehler.Übrigens stürzt auch ein vollkommen neu erstelltes Projekt bei dem Aufruf der Timerfunktionen ab. Es ist also ausgeschlossen, dass der Fehler aus meienm übrigen Quellcode kommt.
Ich programmiere mit dem Visual Studio 2008 Prof.
interressanter weise hat ein weiterer Versuch einen Timer in einer ActiveX-Komponente aufzurufen in einer Visual C++ 6.0 Umgebung anstandslos funktioniert. Der Fehler kann doch nicht an dem Visual Studio 2008 liegen, oder?Falls sich sonst noch jemand mit Timern für ActiveX beschäfftigt hat, oder eine Idee hat, wie das Problem zu lösen ist wäre ich für eine Antwort sehr dankbar!
Gruß
Thomas
-
Du kanst den Debugger an den Test Container anschließen und kannst dnenoch debuggen.
Ich würde sagen, dass Du uns erstmal etwas Code zeigen solltest.
Wie setzt Du den Timer, woher hast Du das Handle für das Fenster?
Wie sieht Dein Hadler aus?
-
Naja, im Prinzip ist da ja nicht viel Code. Aber das was ich hab sieht so aus:
LONG CActiveXCanUSBCtrl::StartTimer(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); //Visual Studio-Assistent // TODO: Fügen Sie hier Ihren Dispatchhandlercode ein. Log.AddLog(_T("Main"), _T("vor Timerstart"), LogStandard); Log.SaveAs(_T("c:\temp\Log.txt")); SetTimer(100, 100, 0); Log.AddLog(_T("Main"), _T("nach Timerstart"), LogStandard); Log.SaveAs(_T("c:\temp\Log.txt")); return 0; } void CActiveXCanUSBCtrl::StopTimer(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); //Visual Studio-Assistent // TODO: Fügen Sie hier Ihren Dispatchhandlercode ein. KillTimer(100); } void CActiveXCanUSBCtrl::OnTimer(UINT_PTR nIDEvent) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. m_iTimer++; COleControl::OnTimer(nIDEvent); }Der Selbe Aufbau funktioniert unter Visual C++ 6.0 einwandtfrei. Unter VS2008 bricht das Programm ab, sobald die StartTimer oder die StopTimer-Methode aufgerufen wird. Und in einer "normalen" MFC-Anwendung klappts auch.
-
Wie? ASSERT?
is m_hWnd überhaupt gesetzt und !=NULL?
-
Sieht aus als würdes an den fehlendem Escape-Sequenzen in den Pfadangaben liegen. Ersetze doch mal die '\' mit '\'.