Random-funktionen in WinAPI ?!?
-
Die Funktionen liegen nicht im Namensbereich std.
-
Das habe ich auch schon wech gelassen...
--------------------Konfiguration: test - Win32 Debug--------------------
Kompilierung läuft...
test.cpp
K:\test\test.cpp(111) : error C2065: 'srand' : nichtdeklarierter Bezeichner
K:\test\test.cpp(112) : error C2065: 'rand' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.test.exe - 2 Fehler, 0 Warnung(en)
Dann habe ich nurnoch das...
Das verstehe ich einfach nicht...hier mal meine ganzer Kopf...
#include <windows.h> #include <time.h> #include <stdlib.h> #include <cstdlib> #include <iostream.h> #include "stdafx.h" const UINT TimerID = 1; const UINT SizeX = 800; const UINT SizeY = 600; const char szAppName[] = "Stop-Uhr"; static RECT rect; int iMSec = 0; int iSec = 0; int iMin = 0; int iStd = 0; int iTag = 0; bool isActive = false; int fx = 10; int fy = 50; int x;Ich benutze übrigens die Visual Studio 6.0 Autorenedition.
Außerdem habe ich eine einfache Win32 anwendung erstellt...
-
Hm...also bei mir reicht sowohl <iostream> (ohne '.h' (!) - das '.h' ist veraltet und sollte nicht mehr verwendet werden) als auch <cstdlib>.
Welchen/e Compiler/IDE verwendest Du denn ? ... MS Visual C++ 6.0 ?
-
Jop MS 6.0
Deshalb verstehe ich es ja auch nicht...
es geht einfach nicht...ich habe 1000 bibliotheken versucht...
iostream.h und auch ohne...
und iostream mit namespace std;
Nichts ging
-
Hm sehr merkwürdig...also hab das:
#include <iostream> int main() { rand(); srand(0); return (0); }auch mal aufer MS VC++ 6.0 getestet und es funktioniert einwandfrei
. Vllt hast Du ein falschen Projekt erstellt, oder den Compiler falsch eingerichtet... . Kann ich aber so nicht nachvollziehen... evtl. lohnt sich auch das installieren der noch verfügbaren Service-Packs, falls es n interner Fehler ist...
-
--------------------Konfiguration: versuch - Win32 Debug--------------------
Kompilierung läuft...
versuch.cpp
c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\versuch\versuch.cpp(112) : error C2660: 'rand' : Funktion akzeptiert keine 1 Parameter
Fehler beim Ausführen von cl.exe.versuch.exe - 1 Fehler, 0 Warnung(en)
Soa ich bin schon mal weiter....
Ich habe die "stdafx.h" raus genommen und eingesttellt das vorkompilierte header-dateien nicht genutzt werden...
Jetzt kommt nurnoch das rand keine 1 parameter haben will..
aber die klammern sind leer...
-
Klar gibt es in der WinApi eine random-Funktion: "CryptGenRandom".
Und die ist im Gegensatz zu den schon genannten Oldtimern auch kryptografisch sicher.
-
Sqwan schrieb:
Jetzt kommt nurnoch das rand keine 1 parameter haben will..
aber die klammern sind leer...Guck nochmal richtig, das sind sie sicher nicht.
Sorry wenn das jetzt doof klingt, aber wenn sie wirklich leer sind, dann ist dein Compiler im Eimer.Wolltest du vielleicht srand schreiben und hast das s weggelassen? Und dann drübergelesen?
-
Der fehler lag woanders...Ich benutze die rand() funktion nicht nur einmal...
Und an einer anderen stelle habe ich rand(x) stehen gehabt...
An der stelle hatte ich nicht geguckt weil ich vergessen hatte das ich die da auch habe...
War halt schon spät
Geht jetzt....
srand((unsigned long)time(NULL)+x1); x1=(rand()%800);schaut nun so aus..
Was mich nun aber interessiert ist dieses "CryptGenRandom"
hat das schon mal wer verwendet?Kann dazu vllt mal einer ein 3 zeilen bsp machen?
Weil iwie verwirrt es mich das nur wahr oder falsch zurückgegeben werden kann...
Aber ich brauche ja eine zahl :-SNaja... Herzlichen dank für die hilfe...
Habt mir schon sehr geholfen...Sqwan
-
//-------------------------------------------------------------------- // Declare and initialize variables. HCRYPTPROV hCryptProv; BYTE pbData[16]; //-------------------------------------------------------------------- // This code assumes that a cryptographic context has been acquired // For code details, see "Example C Program: Duplicating a Session // Key." //-------------------------------------------------------------------- // Generate a random initialization vector. if(CryptGenRandom( hCryptProv, 8, pbData)) { printf("Random sequence generated. \n"); } else { printf("Error during CryptGenRandom.\n"); exit(1); }Quelle msdn

die Funktion füllt den speicherbereich pbData mit random werten. Das hat den vorteil das du nichtmehr auf randmax beschränkt bist sondern wenn du willst auch eine 1MB große random zahl createn. ohne rand() mehrmals aufzurufen.
mfg tobZel
-
Sqwan schrieb:
Und an einer anderen stelle habe ich rand(x) stehen gehabt...
An der stelle hatte ich nicht geguckt weil ich vergessen hatte das ich die da auch habe...Ja, genau deswegen tut man ja auch auf den Fehler doppelklicken, und die IDE hüpft netterweise ins richtige File in die richtige Zeile. Dann sieht man das schon
