[Hilföö] C++ DLL - Console, bzgl. strcmp... einfach lesen ;)

03/16/2013 16:28 xSnake#1
Hallöö ;o
I hob da n Problämm...

Ich habe ne DLL in der ich eine Konsole erscheinen lasse.
Dann hab ich ne kleine Funktion zum ändern der Schriftfarbe..

Soweit so gut...
Funktioniert soweit- ABER...
Ich will jetzt ne Eingabe per "if" abfragen! (siehe code)

PHP Code:
void Konsole()
{
        
AllocConsole();
        
freopen("CONOUT$""wb"stdout);
        
freopen("CONOUT$""wb"stderr);
        
freopen("CONIN$""rb"stdin);

        

        
SetConsoleTitle(TEXT("DLL (Konsole)"));

        
textcolor(LIGHTGREEN); std::cout << "Successfully Injected! \n";
        
std::cout << "\n"//Noch ne Leerzeile
        
textcolor(LIGHTCYAN); std::cout << "[CONSOLE] Type in your cmd: "textcolor(WHITE);

    for(;;){

        
chareingabe;
        
std::cin >> eingabe;

        if(!
strcmp("/cmd"eingabe))
                {
                        
std::cout << "Yo! \n";
                }    
        else
                {
                        
std::cout << "Can´t find command '" << eingabe << "'" << "\n";
                }
        

            }

Mein Problem ist nun, dass ich in der Abfrage, die Textfarbe nicht mehr ändern kann. sobald ich vor das
Code:
std::cout << "Yo! \n";
meine textfarbe setze, macht meine konsole nicht mehr weiter :<
Bleibt einfach stehen und gibt garnix mehr zurück...


Kann mir jemand helfen?
03/16/2013 16:39 Schlüsselbein#2
Schau dir nochmal an, in was du deine Eingabe einliesst, dann kommst selber drauf.
03/16/2013 16:50 xSnake#3
Quote:
Originally Posted by Schlüsselbein View Post
Schau dir nochmal an, in was du deine Eingabe einliesst, dann kommst selber drauf.
o: sorry, iwie nicht..
hab jetzt 2 nächte nicht geschlafen.. bin zu dumm zu Q_Q
ohne die "textfarbenfunktion" funktionierts ja :o

aber danke schonmal für deine antwort ^^
03/16/2013 20:46 Schlüsselbein#4
Code:
        char* eingabe;
        std::cin >> eingabe;
Erläuter mir mal diese beiden Zeilen. Also denk mal drüber nach und schreib, was jede von diesen macht. Was passiert, wenn Zeile 1 ausgeführt wird, was passiert bei Zeile 2. Werd ruhig ausschweifend. Während du darüber nachdenkst und es schreibst, wird dir auffallen, warum das nicht gehen kann.

Für mehr reichts jetzt aber nicht, da heute Samstag Abend ist und meine langhälsigen Freunde auf mich warten.
03/16/2013 20:54 xSnake#5
Quote:
Originally Posted by Schlüsselbein View Post
Code:
        char* eingabe;
        std::cin >> eingabe;
Erläuter mir mal diese beiden Zeilen. Also denk mal drüber nach und schreib, was jede von diesen macht. Was passiert, wenn Zeile 1 ausgeführt wird, was passiert bei Zeile 2. Werd ruhig ausschweifend. Während du darüber nachdenkst und es schreibst, wird dir auffallen, warum das nicht gehen kann.

Für mehr reichts jetzt aber nicht, da heute Samstag Abend ist und meine langhälsigen Freunde auf mich warten.
Zeile2 sorgt dafür dass die console sozusagen "lauscht" / input ausließt und in der varbiablen "eingabe" speichert! :o

Zeile1 sorgt dafür dass die variable "eingabe" als datentyp char erstellt wird :o

und nu?
03/16/2013 22:29 Dr. Coxxy#6
vermisch nicht c mit c++.
Wenn du cin und cout nimmst, dann nimm auch den von c++ bereitgestellten datentyp string.

tipp: cin schreibt IN den übergebenen BUFFER hinein, jetzt klar?

EDIT:
und gewöhn dir nen einheitlichen stil an und rück alles ordentlich ein.
in c++ hat es sich weitgehend durchgesetzt, die geschweiften klammern immer in neue zeilen zu setzen.
03/16/2013 23:04 .SkyneT.#7
Quote:
Originally Posted by xSnake View Post
Zeile1 sorgt dafür dass die variable "eingabe" als datentyp char erstellt wird :o
Falsch, sonst würde es ja so aussehen:
Code:
char eingabe;
03/17/2013 02:09 Delinquenz#8
Um dir den Fehler vorweg zu nehmen: char* kann lediglich auf eine Konstante zeigen. Sprich zur Laufzeit nicht veränderbare Werte.
03/17/2013 02:30 Dr. Coxxy#9
Quote:
Originally Posted by Delinquenz View Post
Um dir den Fehler vorweg zu nehmen: char* kann lediglich auf eine Konstante zeigen. Sprich zur Laufzeit nicht veränderbare Werte.
wut?
bitte...
junge wtf.
bitte such ein fenster, mind. 3. stock und spring...
03/17/2013 07:00 TIMΣ™#10
Quote:
Originally Posted by Dr. Coxxy View Post
wut?
bitte...
junge wtf.
bitte such ein fenster, mind. 3. stock und spring...
:awesome::D:awesome::awesome::D

Quote:
Um dir den Fehler vorweg zu nehmen: char* kann lediglich auf eine Konstante zeigen. Sprich zur Laufzeit nicht veränderbare Werte.
:eek:

Ich weiß garnicht was du willst aber das was du meinst dürfte das sein
Code:
const char* eingabe;
Nur habe ich keine Ahnung wobei das nun helfen könnte...

Wieso setzt du überhaupt einen Pointer? Bzw. wozu brauchst du ihn? Denn ich blicke bei deinem Code leider nicht ganz durch.

Also ich würde wie Coxxy bereits sagte einen string benutzen, außer du benutzt nur Zahlen als eingabe. Du könntest aber natürlich auch ein char Array nutzen, was wiederum nicht so schön wäre.

Code:
std::string eingabe;
std::cin << eingabe;
Und dabei nicht den Header vergessen

Code:
#include <string>
Wenn ich mit irgendetwas falsch liege korrigiert mich, ich bin noch nicht so erfahren wie viele ander hier.
03/17/2013 09:47 xSnake#11
Quote:
Originally Posted by TIMΣ™ View Post
:awesome::D:awesome::awesome::D



:eek:

Ich weiß garnicht was du willst aber das was du meinst dürfte das sein
Code:
const char* eingabe;
Nur habe ich keine Ahnung wobei das nun helfen könnte...

Wieso setzt du überhaupt einen Pointer? Bzw. wozu brauchst du ihn? Denn ich blicke bei deinem Code leider nicht ganz durch.

Also ich würde wie Coxxy bereits sagte einen string benutzen, außer du benutzt nur Zahlen als eingabe. Du könntest aber natürlich auch ein char Array nutzen, was wiederum nicht so schön wäre.

Code:
std::string eingabe;
std::cin << eingabe;
Und dabei nicht den Header vergessen

Code:
#include <string>
Wenn ich mit irgendetwas falsch liege korrigiert mich, ich bin noch nicht so erfahren wie viele ander hier.

Ähm.. Joa xD
Projektmappe im Anhang... Da seht ihr mein Problem..
Hab das ja auch schon mit String versucht.. Aber ich komm tzd nicht klar :<

Wäre nice wenn mir wer meinen fehler direkt behebt.. :o
Kriegt auch 10 e*gold :D


[Only registered and activated users can see links. Click Here To Register...]
03/17/2013 10:33 .SkyneT.#12
Quote:
Originally Posted by xSnake View Post
Ähm.. Joa xD
Projektmappe im Anhang... Da seht ihr mein Problem..
Hab das ja auch schon mit String versucht.. Aber ich komm tzd nicht klar :<

Wäre nice wenn mir wer meinen fehler direkt behebt.. :o
Kriegt auch 10 e*gold :D
[Only registered and activated users can see links. Click Here To Register...]

Noch ein gut gemeinter Tipp, lern erst die Sprache bevor du versuchst
irgendwelche Hacks zu schreiben.
Ich hab das jetzt nur so ausgebessert das es läuft, mehr nicht.

z.B ist ein mehrfacher Aufruf von SetConsoleTextAttribute() mit derselben Farbe
einfach sinnlos da, ich zitiere:
Quote:
Originally Posted by msdn.microsoft.com
This function affects text written after the function call.
03/17/2013 10:43 xSnake#13
Quote:
Originally Posted by .SkyneT. View Post
[Only registered and activated users can see links. Click Here To Register...]

Noch ein gut gemeinter Tipp, lern erst die Sprache bevor du versuchst
irgendwelche Hacks zu schreiben.
Ich hab das jetzt nur so ausgebessert das es läuft, mehr nicht.

z.B ist ein mehrfacher Aufruf von SetConsoleTextAttribute() mit derselben Farbe
einfach sinnlos da, ich zitiere:

Ja mach ich xD
Dankeschön :)
03/17/2013 12:10 MrSm!th#14
Um es dir trotzdem noch zu erklären:
Du schreibst mit deine Eingabe in den vorher nicht erstellten Puffer, auf den eingabe zeigen soll. Der Zeiger ist ungültig, weil du ihm keinen Wert zuweist. Ich glaube, du hast elementare Aspekte von Datentypen und speziell Zeigern noch nicht verstanden. Lass das mit dem Hacking bis dahin lieber.