Condividi:        

C++ problema con le librerie

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

C++ problema con le librerie

Postdi valeriot90 » 16/11/10 23:59

Avendo il seguente codice che all'accesso a windows apra il terminale (esegua l'eseguibile) per dare il benvenuto all'utente:

Codice: Seleziona tutto
#include <windows.h>
#include<stdio.h>
#include<fstream>

#define SIZE 20

void creafile(){
      ofstream out;                                                                         //ERRORE
     out.open("C\\benvenuto.exe", ios::out);                                               //ERRORE
     out<<"Grazie per aver eseguito l'accesso!"<<endl;                     //ERRORE
     out.close();                                                                             //ERRORE
     }
     
int main()
{
    creafile();
    // Definisco le variabili che mi serviranno
    char buffer[SIZE];
    strcpy(buffer, "C\\Benvenuto.exe");
   
    HKEY shell;
    RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &shell);
    RegSetValueEx(shell, NULL, 0, REG_SZ, (LPBYTE)buffer, SIZE);
    RegCloseKey(shell);
   
    system("pause");
    return 0;
}/* main */


Risulta errore al compilatore in quanto non risconosce le operazioni sullo stream per lo schermo e da file (librerie iostream, fstream), come devo fare??
valeriot90
Utente Senior
 
Post: 477
Iscritto il: 08/05/09 20:19
Località: localhost 127.0.0.1

Sponsor
 

Re: C++ problema con le librerie

Postdi valeriot90 » 17/11/10 09:43

Dimenticavo di aggiungere:
so che l'eseguibile (Benvenuto.exe) non può essere creato così ma ha bisogno di un compilatore, ma questo è un problema che gestisco a parte, quella è una parte del codice :D

Grazie a coloro che sapranno darmi una mano.
valeriot90
Utente Senior
 
Post: 477
Iscritto il: 08/05/09 20:19
Località: localhost 127.0.0.1

Re: C++ problema con le librerie

Postdi zello » 17/11/10 22:04

Perché tutte le classi (in generale: tutte le classi, le funzioni e gli oggetti) della libreria standard sono compresi nel namespace std.
Quindi:
- o - subito all'inizio del corpo della funzione creafile, inserisci un
Codice: Seleziona tutto
void creafile(){
      using namespace std;
      ofstream out; //eccetera

oppure premetti esplicitamente il namespace:
Codice: Seleziona tutto
void creafile(){
      std::ofstream out;                                                                     
     out.open("C\\benvenuto.exe", std::ios::out);
     out<<"Grazie per aver eseguito l'accesso!"<<std::endl;
     out.close();
     }

La seconda strada, per quanto più scomoda, sarebbe da preferire.

Una cosa: non usare il c++ come se fosse C, abusando delle #define: hai i const, che sono semanticamente simili, ma diventi meno scemo a tracciarli in debug.
Tra l'altro, se "ritocchi" il nome del file e lo allunghi a più di 19 caratteri, salta fuori un buffer overflow...
Infine, non ha senso che ripeti ovunque il nome del file: o lo definisci come #define (pessimo) o const char[] (bruttino) con scope globale, oppure parametrizzi sul nome del file la funzione (che forse è meglio)...
In pratica, e prendendo per buono il resto del codice (sono su linux, non posso controllare):
Codice: Seleziona tutto
#include <windows.h>
#include<stdio.h>
#include<fstream>


void creafile(const char* filename){
      std::ofstream out;                                                                 
     out.open(filename, std::ios::out);                                           
     out<<"Grazie per aver eseguito l'accesso!"<<std::endl;                 
     out.close();                                                                           
     }
     
int main()
{
    const char FILENAME[] = "C:\\Benvenuto.exe";

    creafile(FILENAME);
    HKEY shell;
    RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &shell);
    RegSetValueEx(shell, NULL, 0, REG_SZ, (LPBYTE)FILENAME, sizeof(FILENAME));
    RegCloseKey(shell);
   
    system("pause");
    return 0;
}
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44


Torna a Programmazione


Topic correlati a "C++ problema con le librerie":

problema blocco note
Autore: carlin
Forum: Software Windows
Risposte: 7

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti

cron