|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
ps: non è che all'interno di WM_COMMAND bisogna inserire un'opzione di default??? solo che non saprei come metterla...
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Mi sembra che sia stato reintrodotto lo stesso problema di prima:
Codice:
case ID_COPY:
int len = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT1));
if(len < 0)
{
cout<<"Non è stato inserito alcun nome.";
}
if(len > 0)
{
//int i;
char* buf;
cout<<"iniziato.";
buf = (char*)GlobalAlloc(GPTR, len + 1);
GetDlgItemText(hWnd, IDC_EDIT1, buf, len + 1);
//... fa qualcosa con il testo ...
cout<<"iniziato.";
copymydir("E:\\Php", buf);
GlobalFree((HANDLE)buf);
}
La soluzione e' ovviamente la medesima: dichiara bug[MAX_PATH] oppure se vuoi usare la GlobalAlloc, alloca almeno MAX_PATH bytes. Attenzione che qui ci trovi un altro caso di blind trust o, se preferisci, fede cieca: infatti credi ciecamente che GlobalAlloc() non fallira'. Non e' un buon stile di programmazione, controlla sempre l'esito delle funzioni che allocano memoria.
__________________
In God we trust; all others bring data |
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
Grazie ora funziona tutto alla perfezione. Dunque nella mia ignoranza chiedo solo come si fa a verificare se la globalalloc ha avuto esito positivo???
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
e come va scritto???
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Codice:
if(variabile != NULL)
{
//fai le tue cose
}
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
ok...
sentite già che ci sono se io richiamo una funzione così: copymydir("Z:\\SD Drive", buf, result); come faccio a fare in modo che se c'è un errore result diventi TRUE??? cioè è una variabile BOOL e in caso di errore ho scritto questo: result = TRUE; solo che in caso di errore resta sempre false. Forse perchè viene modificata in un altra funzione... comunque come faccio??? |
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Devi pensare che le variabili locali esistono tutte in memoria, ma appartengono a diversi "spazi": se le hai dichiarate in una funzione, non puoi accedervi direttamente.
In C++ le variabili vengono passate sullo stack alle funzioni chiamate e sono una copia di quelle originali: in pratica, all'interno delle funzioni richiamate, lavori sulle copie. A questo punto puoi decidere di usare un puntatore e lavorare direttamente sull'area di memoria che contiene la variabile, oppure dire al compilatore di passare la variabile per riferimento: Codice:
int miaFunzione(int copia1, int copia2, int &riferimento);
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
grazie siete veramente bravissimi... lo so che è da un po' che dico che è l'ultima domanda comunque... non ho capito come mai questo (SEMPLICISSIMO) codice non incrementa pos:
Codice:
ifstream in("options.config", ios::in | ios::binary);
if(!in)
{
MessageBox(NULL, "Impossibile trovare il file di configurazione\noptions.config", "Errore", MB_OK|MB_ICONEXCLAMATION);
}
char porigine[500];
int pos;
for(pos=0; porigine[pos]!='>'; pos++)
{
if(pos=0)
{in.ignore(1);}
in.get(porigine[pos]);
cout<<pos<<endl;
}
in.close();
|
|
|
|
|
|
#30 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
nel ciclo stai facendo un assegnamento non un confronto.. pos == 0 non pos = 0..
|
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
già che scemo!!!
resta il fatto che il contenuto del file da aprire è: <E:\Php> e che il programma non lo legge correttamente e va avanti fino a 250 (circa) caratteri. |
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Codice:
char porigine[500];
int pos;
for(pos=0; porigine[pos]!='>'; pos++)
{
if(pos=0)
{in.ignore(1);}
in.get(porigine[pos]);
cout<<pos<<endl;
}
in.close();
il ciclo for va a testare porigine[pos] per vedere se e' diverso da '>', ma in porigine, nel momento che fai quel test, non hai ancora scritto nulla. Siccome non scrivi nulla, il contenuto e' indeterminato. Intorno alla posizione 250 c'e' casualmente scritto un '>' pertanto il ciclo termina. Ti consiglio di rivedere questo ciclo
__________________
In God we trust; all others bring data |
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
cavolo...
continuo ad avere errori nei punti in cui meno me lo aspetto... Codice:
char porigine[500];
int pos = 0;
while(porigine[pos]!='>')
{
if(pos==0)
{in.ignore(1);}
if(in.peek()=='>')
{break;}
in.get(porigine[pos]);
cout<<porigine[pos]<<endl;
pos++;
}
in.close();
copymydir(porigine, buf, result);
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
niente risolto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:33.




















