Vector2D/Array
-
Das ganze soll nen Bot für JamLegend werden siehe hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-241595-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html//Global struct Vector2D { Vector2D(): x(0), y(0){} Vector2D(int x, int y): x(x), y(y){} int x, y; }; HDC Screen_HDC; Vector2D Key[5]; COLORREF Key_Color[5]; //Form1_Load { Screen_HDC = CreateDC(L"DISPLAY", NULL, NULL, NULL); } //100ms Timer { //Funtioniert this->Position_X->Text = MousePosition.X.ToString(); this->Position_Y->Text = MousePosition.Y.ToString(); if(GetAsyncKeyState(VK_NUMPAD1)&1) { //Funktioniert this->Key_1_X->Text = MousePosition.X.ToString(); this->Key_1_Y->Text = MousePosition.Y.ToString(); //Besagter Fehler Key[0] = Vector2D( MousePosition.X, MousePosition.Y ); //Folgefehler Key_Color[0] = GetPixel(Screen_HDC, Key[0].x, Key[0].y); } //[...]Selbes für Key[1]-Key[4] BYTE Tastatur[256]; if(!GetKeyboardState(Tastatur)) return; for(int i=0; i < 5; i++) { //Überspringen wenn nicht aktiviert if(i==0 && !checkBox1->Checked) continue; if(i==1 && !checkBox2->Checked) continue; if(i==2 && !checkBox3->Checked) continue; if(i==3 && !checkBox4->Checked) continue; if(i==4 && !checkBox5->Checked) continue; //Folgefehler COLORREF TempColor = GetPixel(Screen_HDC, Key[i].x, Key[i].y); if(TempColor != Key_Color[i]) { Tastatur[0x31 + i] |= 1; } } SetKeyboardState(Tastatur); }
-
SWW13 schrieb:
Key[0] = Vector2D( MousePosition.X, MousePosition.Y ); //MousePosition wird korrekt an den Konstruktor übergeben //Nacher steht in Key[1].x der Wert von MousePosition.Y(?!?) Der Rest bleibt unverändertErkläre mal was ist genau der Fehler den du beobachtest? Du schreibst hier eigentlich nichts in Key[1] somit steht da nur undefiniertes zeug drinnen (in der neuen Version 0). In Key[0].x und Key[0].y solltest du deine Mausposition finden.
-
Das ist ja das komische, ich habe es Debuggt und habe folgendes festgestellt:
Vor der Zuweißung:
Key[0].x == 20904190(Irgendwas in der Richtung)
Key[0].y == 20904190
Key[1].x == 0
Key[1].y == 0
Key[2].x == 0
[...]nach der Zuweißung(Key[0] = Vector2D( MousePosition.X, MousePosition.Y )):
Key[0].x == 20904190(Irgendwas in der Richtung)
Key[0].y == 20904190
Key[1].x == MousePosition.Y
Key[1].y == 0
Key[2].x == 0
[...]nach der Zuweißung(Key[1] = Vector2D( MousePosition.X, MousePosition.Y )):
Key[0].x == 20904190(Irgendwas in der Richtung)
Key[0].y == 20904190
Key[1].x == 0
Key[1].y == MousePosition.X
Key[2].x == MousePosition.YBei den anderen hab ichs noch nicht getatstet, da müssten aber ähnliche Fehler auftretten.
Ich glaub das Array hat irgend nen Macken:
//Besagter Fehler Key[0] = Vector2D( 150, 250 ); //Funktioniert perfekt Vector2D Test = Vector2D( 150, 250 );
-
SWW13 schrieb:
Vor der Zuweißung:
Vielleicht hast du das Array so zugeweißt, dass es Rot gesehen hat...

-
Tipp: Probier dein Programm zu verkleinern oder von einem kleinen Testprogramm aus, welches funktioniert, auf dein Programm hin zu vergrössern. Das kann einem helfen festzustellen, ab welcher Komponente der Fehler auftritt und in welchem Bereich er ist. Wenn man nur noch Bahnhof versteht, ist das oft ein sehr gutes Mittel.
Also zum Beispiel zum Starten:
struct Vector2D { Vector2D() : x(0) , y(0) { } Vector2D(int x, int y) : x(x) , y(y) { } int x, y; }; int main() { Vector2D keys[5]; keys[0] = Vector2D(100, 50); keys[1] = Vector2D(40, 200); // ... Mit zum Beispiel dem Debugger testen ... // return 0; }Dieses kleine Programm sollte ja funktionieren. Jetzt kannst du das nach und nach erweitern.
Stichwort:
http://de.wikipedia.org/wiki/Stub_(Programmierung)Grüssli
-
Hmm... korrupte Software/Debugger, das hatte ich bisher noch nie.
Wenn ich das ganze mit ner MessageBox ausgeben lass stimmen die Angaben.Wenn ich das Array lokal in der Funktion deklariere funktioniert der Debugger.
Naja, wenigstens weiß ich jetzt das mein Fehler woanders liegt und dass ich (zumindest in dem Projekt) mich nicht auf den Debugger verlassen kann.
-
Jetzt, wo dus sagst erinnere ich mich, dass ich das auch mal hatte, dass der Debugger mir falsche Werte angezeigt hat. Wenn ich die Werte ausgegeben habe, dann stimmten sie, aber wenn ich sie mir mit dem Debugger anschaute, waren sie falsch.
Vielleicht hilft dir mal ein rebuild des gesamten Projektes..
-
drakon schrieb:
Jetzt, wo dus sagst erinnere ich mich, dass ich das auch mal hatte, dass der Debugger mir falsche Werte angezeigt hat. Wenn ich die Werte ausgegeben habe, dann stimmten sie, aber wenn ich sie mir mit dem Debugger anschaute, waren sie falsch.
Release Modus kompiliert, statt im Debug Modus? Sinnvoll debuggen kann man nur im Debug Modus

Grüssli
-
Ne, neu erstellen hilft nicht. Das ganze steht auf Debug, habs mal mit Release getestet und da tuts natürlich auch nicht.
-
Dravere schrieb:
drakon schrieb:
Jetzt, wo dus sagst erinnere ich mich, dass ich das auch mal hatte, dass der Debugger mir falsche Werte angezeigt hat. Wenn ich die Werte ausgegeben habe, dann stimmten sie, aber wenn ich sie mir mit dem Debugger anschaute, waren sie falsch.
Release Modus kompiliert, statt im Debug Modus? Sinnvoll debuggen kann man nur im Debug Modus

Grüssli
Nene, das war es iirc nicht. Aber manchmal spinnt VC auch einfach rum..

Ist ein Weilchen her, aber ich Frage mich immernoch, was mit VC da wohl sagen wollte.. :p
http://www.drakon.ch/pic/vc_error.jpg