|
You last visited: Today at 19:56
Advertisement
void (__cdecl *)(int)' in 'DWORD
Discussion on void (__cdecl *)(int)' in 'DWORD within the C/C++ forum part of the Coders Den category.
02/28/2012, 21:56
|
#1
|
elite*gold: 0
Join Date: Jan 2011
Posts: 345
Received Thanks: 84
|
void (__cdecl *)(int)' in 'DWORD
Hey e*pvpers,
Ich habe gerade mit C++ angefangen. Nun wollte ich einen Timer machen, in den man die Zeit eingibt und der dann diese Zeit abwartet(Sleep) und danach den Warnton(\a) ausgibt.
Dies hier ist mein Code:
Code:
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int sectime, mintime, htime;
void sectim(int n)
{
sectime = n*1000;
Sleep(sectim);
}
void mintim(int n)
{
mintime = n*60000;
Sleep(mintim);
}
void htim(int n)
{
htime = n*3600000;
Sleep(htim);
}
int main()
{
string t;
int n;
cout << "Wanna give the time in seconds, minutes or hours ?" << endl;
cin >> t;
cout << "Please set the time" << endl;
cin >> n;
if(t == "sec", "seconds")
sectim(n);
else if(t == "min", "minutes")
mintim(n);
else if(t == "h", "hours")
htim(n);
return 0;
}
Dies hier ist der Fehlercode
1>a:\dokumente\c++\timer\timer.cpp(11) : error C2664: 'Sleep': Konvertierung des Parameters 1 von 'void (__cdecl *)(int)' in 'DWORD' nicht möglich
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Bin natürlich auch für Anregungen am Code selber offen.
mfg
xazorstix
|
|
|
02/28/2012, 22:04
|
#2
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
|
Du gibst immer den Funktionsnamen anstatt des Variablennamens als Argument an die Sleep-Funktion. Außerdem solltest du wo es möglich ist nur lokale Variablen benutzen, da globale Variablen böse sind.
|
|
|
02/29/2012, 12:21
|
#3
|
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
|
VBA vorbelastet.
Code:
void sectim( int n )
{
Sleep( n * 1000 );
}
MfG
|
|
|
02/29/2012, 13:17
|
#4
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Das Problem ist ganz einfach, dass du nicht den Namen der Variablen an Sleep übergist, sondern die Funktionen. Und deine Funktionen sind in dem Fall nunmal vom typen void (__cdecl*)(int), was der Compiler jedoch nicht implizit nach unsigned long (DWORD) casten kann.
Anregungen:
Globale Variablen vermeiden.
Globales using namespace vermeiden
Gebe deinen Variablen aussagekräftige Namen. n und t sagen dir absolut gar nichts.
Was ich cool finde:
Wie du den String auf mehrere Möglichkeiten mit dem Komma Operator prüfst. Sieht man nicht sehr häufig!
|
|
|
02/29/2012, 15:45
|
#5
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
|
Quote:
Originally Posted by Nightblizard
Was ich cool finde:
Wie du den String auf mehrere Möglichkeiten mit dem Komma Operator prüfst. Sieht man nicht sehr häufig!
|
Ist...
Code:
if(t == "sec", "seconds")
... nicht gleichwertig mit ...?
Ich dachte immer der Komma-Operator evaluiert zu dem letzten Ausdruck und verwirft den Rest.
|
|
|
02/29/2012, 15:54
|
#6
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Quote:
Originally Posted by Metin2Spieler97
Ist...
Code:
if(t == "sec", "seconds")
... nicht gleichwertig mit ...?
Ich dachte immer der Komma-Operator evaluiert zu dem letzten Ausdruck und verwirft den Rest.
|
Wir haben beide unrecht.
Der Code macht folgendes:
Code:
mov ecx, offset string "seconds"
test ecx,ecx
je DEADBEEFh ;überspringt den if block
Der if-Block wird also immer aufgerufen!
Edit:
Ah, du hast es geändert.
|
|
|
02/29/2012, 16:11
|
#7
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
|
Quote:
Originally Posted by Nightblizard
Edit:
Ah, du hast es geändert.
|
Mir ist im Nachhinein erst aufgefallen, dass der == Operator vor dem Komma kommt. :>
|
|
|
02/29/2012, 17:24
|
#8
|
elite*gold: 0
Join Date: Jan 2011
Posts: 345
Received Thanks: 84
|
DANKE für eure Hilfe, ich habe die Funktion in Sleep durch die Variablen ersetzt.
Dazu habe ich noch einen Warnton eingebaut, welcher ertönt wenn Sleep(time) vorüber ist.
Habe auch eure anderen Verbesserungen mit eingebracht.
Code:
#include <iostream>
#include <string>
#include <windows.h>
void sectime(int n)
{
using namespace std;
int sectim;
sectim = n*1000;
Sleep(sectim);
cout << "\a";
}
void mintime(int n)
{
using namespace std;
int mintim;
mintim = n*60000;
Sleep(mintim);
cout << "\a";
}
void htime(int n)
{
using namespace std;
int htim;
htim = n*3600000;
Sleep(htim);
cout << "\a";
}
int main()
{
using namespace std;
string timetype;
int time;
cout << "Wanna give the time in seconds, minutes or hours ?" << endl;
cin >> timetype;
cout << "Please set the time" << endl;
cin >> time;
if(timetype == "sec", "seconds")
sectime(time);
else if(timetype == "min", "minutes")
mintime(time);
else if(timetype == "h", "hours")
htime(time);
return 0;
}
|
|
|
02/29/2012, 17:58
|
#9
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Du kannst die Eingabe so nicht prüfen. Der Compiler macht aus diesem Code
Code:
if(timetype == "sec", "seconds")
folgendes:
Code:
timetype == sec;
if("seconds") //prüft, ob der angegebene String ungleich null ist und das ist er, weshalb dieser Teil immer aufgerufen wird
Du kannst also so nicht prüfen, da egal ist was du eingibst, es wird immer ausgeführt!
Wie es du machen solltest:
Code:
if(tyetype == "sec" || timetype == "seconds")
|
|
|
02/29/2012, 18:14
|
#10
|
elite*gold: 0
Join Date: Jan 2011
Posts: 345
Received Thanks: 84
|
Wär ja auch zu schön gewesen
Code:
#include <iostream>
#include <string>
#include <windows.h>
void sectime(int n)
{
using namespace std;
int sectim;
sectim = n*1000;
Sleep(sectim);
cout << "\a";
}
void mintime(int n)
{
using namespace std;
int mintim;
mintim = n*60000;
Sleep(mintim);
cout << "\a";
}
void htime(int n)
{
using namespace std;
int htim;
htim = n*3600000;
Sleep(htim);
cout << "\a";
}
int main()
{
using namespace std;
string timetype;
int time;
cout << "Wanna give the time in seconds, minutes or hours ?" << endl;
cin >> timetype;
cout << "Please set the time" << endl;
cin >> time;
if(timetype == "sec" || timetype == "seconds")
sectime(time);
else if(timetype == "min" || timetype == "minutes")
mintime(time);
else if(timetype == "h" || timetype == "hours")
htime(time);
return 0;
}
|
|
|
03/01/2012, 23:51
|
#11
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Es ist auch nicht gerade schlau, die Namen der Funktionen den Namen der Variablen so ähnlich zu wählen (sectime, sectim).
|
|
|
|
Similar Threads
|
[Frage] DWORD zu CString
10/15/2011 - Flyff Private Server - 3 Replies
Hey, hab da mal eine Frage undzwar würde ich gerne eine DWORD Variable (m_pFocusItem->dwLevel) in einen CString konvertieren, habe auch schon gegoogelt, verstehe das mit sprintf() allerdings nicht so richtig >.<
MFG Yakuzai.
|
Type convertierung / Funktionspointer to DWORD (Functionsaddr)
06/28/2011 - General Coding - 3 Replies
Hey liebe Coder,
Ich habe ein kleines Umsetzungsproblem in einem meiner Programme.
Ich versuche die Addr einer Funktion in DWORD zu speichern.
class Beispiel
{
public:
void Funktion();
|
*(Hot*)(DWORD WhcLabs)(D3D,PlantAnyWhere,SNS,Teleport).......... ......
06/25/2011 - WarRock Hacks, Bots, Cheats & Exploits - 15 Replies
Status : Undetected
Version : 1.1
Screen:
http://img232.imageshack.us/img232/2425/whcl.png
Uploaded with ImageShack.us
Virustotal
|
word,dword,float...
05/04/2009 - Private Server - 0 Replies
Hi I wanted to ask what is the lenght in bytes of:
word,dword,qword,float,string,ustring?
|
All times are GMT +2. The time now is 19:56.
|
|