Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. Stehen die Include-Verzeichnisse des Platform SDK vor denen des Visual Studio? Der Compiler nimmt den Header, den er als ersten findet. Außerdem:
  2. Klotzkopp

    Sortieren

    http://forum.fachinformatiker.de/showthread.php?s=&threadid=52079 Darum hier zu.
  3. ::TrackPopupMenu verlangt ein HMENU, dass du aus CreatePopupMenu oder GetSubMenu erhalten hast. Hol dir das nullte SubMenu des geladenen Menüs und verwende dessen HMENU für TrackPopupMenu.
  4. Gar nicht. Wenn du nicht BuildCommDCB verwenden willst, musst du die Elemente der DCB-Struktur von Hand setzen: dcb.BaudRate = CBR_9600; dcb.fParity = FALSE; dcb.ByteSize = 8; dcb.StopBits = ONESTOPBIT; SetCommState musst du in beiden Fällen aufrufen.
  5. // ... HANDLE hSerial = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); if( INVALID_HANDLE_VALUE == hSerial ) { return GetLastError(); } DCB dcb; if( !GetCommState( hSerial, &dcb ) ) { CloseHandle( hSerial ); return GetLastError(); } if( !BuildCommDCB( "9600,n,8,1", &dcb ) ) { CloseHandle( hSerial ); return GetLastError(); } if( !SetCommState( hSerial, &dcb ) ) { CloseHandle( hSerial ); return GetLastError(); } // ... [/CODE]
  6. Ich nehme an, dass im "richtigen" Code BuildCommDCB steht. Bist du sicher (sprich: hast du mit dem Debugger geprüft), dass genau an dieser Stelle eine Exception auftritt, und nicht irgendwann später? Bei mir läuft das nämlich einwandfrei.
  7. Deine DCB-Struktur wird auf dem Stack angelegt, also ist sie zunächst mit zufälligen Werten gefüllt. Da BuildCommDCB nur die Werte in der Struktur setzt, die auch im String stehen, ist die Struktur danach immer noch ungültig. Füll zuerst mit GetCommState die Struktur mit den aktuellen Einstellungen der Schnittstelle, bevor du BuildCommDCB aufrufst, dann sollte das klappen.
  8. signal für STRG-C funktioniert unter Win32 nicht. Man kann SetConsoleCtrlHandler verwenden. Hier steht was dazu: http://www.codeproject.com/win32/console_event_handling.asp
  9. Jede Klasse, die von CWnd abgeleitet ist, erbt diese Variable von CWnd. Wenn du also von CDialog oder CView abgeleitete Klassen hast, dann ist in deren Memberfunktionen diese Variable zugänglich.
  10. Verschoben: --> Datenbanken
  11. Filter.seekg( 0 );
  12. OK, war alles mein Fehler. NotifyChangeEventLog selbst wartet nicht, sondern richtet nur das Event so ein, dass es ausgelöst wird, wenn ein neuer Eintrag ins Event-Log geschrieben wird. D.h. NotifyChangeEventLog wird nur einmal aufgerufen, und danach mit WaitFor... auf das Event gewartet: HANDLE hLog = OpenEventLog( NULL, "System" ); HANDLE hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); if( NotifyChangeEventLog( hLog, hEvent ) ) { MessageBox( NULL, "NCEL OK", "", MB_OK ); } while( true ) { if( WAIT_OBJECT_0 == WaitForSingleObject( hEvent, INFINITE ) ) { MessageBox( NULL, "Neues Event", "", MB_OK ); } } [/CODE]
  13. So müssen die Pfade nur aussehen, wenn sie in deinem Quellcode stehen. Keinesfalls musst du einen eingelesenen oder aus einer anderen Funktion zurückgegebenen String so bearbeiten. Also bitte kein Replace.
  14. Wie sieht denn der Rückgabewert von GetLastError im else-Block aus?
  15. Andersrum. Wenn NotifyChangeEventLog TRUE zurückgibt, gibt es neue Einträge. Der else-Block wird ausgeführt, wenn beim Ausführen von NotifyChangeEventLog ein Fehler auftritt. Rufst du EventTest::Execute eventuell nur einmal auf? Dann ist das klar.
  16. Für managed C++ verwendest du wohl besser System.IO.File.Move.
  17. Der zweite Parameter muss FALSE sein, weil NotifyChangeEventLog ein manuell zurückzusetzendes Event erwartet. Ein Auto-Reset-Event, wie das, das du erzeugst, funkioniert möglicherweise nicht richtig. Du musst den Rückgabewert von NotifyChangeEventLog verarbeiten. Was du tust, ist NotifyChangeEventLog aufzurufen, den Rückgabewert zu verwerfen, und danach den Funktionszeiger auf NotifyChangeEventLog mit NULL zu vergleichen, was niemals wahr sein wird. Das hier sollte funktionieren: if( NotifyChangeEventLog( hLog, hEvent ) ) { // Neue Events } else { // Fehler }[/CODE] Ich weiß nicht genau, was du mit "deaktiviert" meinst, aber ein Programm, dessen Fenster im Hintergrund oder minimiert ist, läuft normal weiter.
  18. Kennst du denn deinen "Datenbankordner"? Wenn ja, dann setz doch einfach diesen Pfad vor "\temp\Dateiname". Zum Kopieren gibt es CopyFile.
  19. Das ist veraltet. Verwende #include <iostream> Wenn du nicht vor jedes cin und cout std:: schreiben willst, auch noch using namespace std; Die beiden brauchst du gar nicht. Das muss int main() heißen. Diese Zeilen bewirken nichts, die kannst du also auch weglassen. Das ist nicht das, was du willst. Hier wird das Ergebnis des Vergleichs (ausw == Zeichen) mit einem anderen Zeichen logisch oder-verknüpft. Das Ergebnis ist, weil das Zeichen nicht das Nullzeichen ist, immer wahr. Was du meinst, ist: else if (ausw=='m' || ausw=='M') usw.
  20. Du musst den Rückgabewert von OpenEventLog speichern, denn das ist das ist das erste Handle, das du bei NotifyChangeEventLog angeben musst. Das andere ist ein Event, das du selbst mit CreateEvent erzeugen musst: HANDLE hLog = OpenEventLog( NULL, "System" ); HANDLE hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); NotifyChangeEventLog( hLog, hEvent ); Beachte, dass der Aufruf von NotifyChangeEventLog blockt, d.h. wenn nicht dein ganzes Programm an dieser Stelle stehenbleiben soll (sprich: es soll noch etwas anderes tun), dann musst du diesen Code in einem neuen Thread ausführen.
  21. Es wird aber keine Windows-Botschaft erzeugt, nur weil irgend jemand OpenEventLog aufruft. Ich kenne TEvent nicht, aber ich würde mich sehr wundern, wenn es in der Lage wäre, einen Hook für eine beliebige API-Funktion zu erstellen. Da wird dir nichts anderes übrig bleiben, als in regelmäßigen Abständen das Eventlog zu öffnen und nachzusehen.
  22. Mir ist nicht ganz klar, was du da machen willst. 1. Du ereugst ein neue Instanz von TEvent, legst die Adresse in deinem Zeiger ab, und überschreibst dann den Zeiger durch eine erneute Zuweisung. Damit ist die Instanz nicht mehr zugänglich -> Speicherleck. 2. OpenEventLog (ohne Klammern) ist ein Funktionszeiger. Ich kann mir nicht vorstellen, welchen Sinn es machen könnte, diesen in einem TEvent* zu speichern. Der Compiler kann das nicht, daher die Fehlermeldungen. Wenn du das trotzdem machen willst (wie gesagt, für mich macht das keinen Sinn), dann musst du den Zeiger mit reinterpret_cast oder einem C-Style-Cast umwandeln. Damit sagst du dem Compiler: "Vertrau mir, ich weiß, was ich mache".
  23. Mein Lösungsansatz leitet die Anzahl der befallenen Pferde direkt aus der Nacht ab, in der sie die Koppel verlassen haben. Wären es nur zwei gewesen, hätten sie die Koppel schon in der ersten Nacht verlassen können, usw.
  24. Also ich denke mir das so: Ich meine ja, dass es 6 befallene Pferde sind. Das heißt also, diese 6 Pferde sehen 5 Kreuze, alle anderen sehen 6. Die Pferde, die 5 Kreuze sehen, denken sich: "Ich sehe 5 Kreuze, also sind entweder 5 oder 6 Pferde befallen. Angenommen, es wären 5, dann würden diese 5 nur vier Kreuze sehen. Was würden diese 5 denken?" "Ich sehe 4 Kreuze, also sind entweder 4 oder 5 Pferde befallen. Angenommen, es wären 4, dann würden diese 4 nur 3 Kreuze sehen. Was würden diese 4 denken?" "Ich sehe 3 Kreuze, also sind entweder 3 oder 4 Pferde befallen. Angenommen, es wären 3, dann würden diese 3 nur 2 Kreuze sehen. Was würden diese 3 denken?" "Ich sehe 2 Kreuze, also sind entweder 2 oder 3 Pferde befallen. Angenommen, es wären 2, dann würden diese 2 nur 1 Kreuz sehen. Was würden diese 2 denken?" "Hm, ich sehe nur ein Kreuz. Da es mindestens zwei befallene Pferde sind, bin ich auch befallen. Mift[tm]!". Diese beiden würden in der ersten Nacht die Koppel verlassen. Wenn dies nicht passiert, würden alle Pferde, die zwei Kreuze sehen, am 2. Tag wissen, dass es 3 befallene Pferde sind, und in der 2. Nacht die Koppel verlassen. Wenn dies nicht passiert, würden alle Pferde, die 3 Kreuze sehen, am 3. Tag wissen, dass es 4 befallene Pferde sind, und in der 3. Nacht die Koppel verlassen. Wenn dies nicht passiert, würden alle Pferde, die 4 Kreuze sehen, am 4. Tag wissen, dass es 5 befallene Pferde sind, und in der 4. Nacht die Koppel verlassen. Wenn dies nicht passiert, würden alle Pferde, die 5 Kreuze sehen, am 5. Tag wissen, dass es 6 befallene Pferde sind, und in der 5. Nacht die Koppel verlassen. Und das ist passiert. Also waren es 6 befallene Pferde. Das erfordert aber, dass die Pferde alle ziemlich schlau sind.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...