PDA

View Full Version : Errore CC3260MT.DLL


Fenomeno85
06-12-2004, 16:07
Caspiterina, allora ho fatto un programma in Borland C++ per cambiare lo sfondo.
Con un timer setto ogni quanto voglio cambiare lo sfondo e, dopo 46 volte che mi cambia lo sfondo mi esce prima errore CC3260MT.DLL e poi un susseguiri di questo:

access violetion at address 00401E72 in modulo Wallpaper.exe read of address 00000012

qualcuno sa cosa diavolo è?

~§~ Sempre E Solo Lei ~§~

cionci
06-12-2004, 17:59
Sicuramente è un memory leak...posta il codice...

Fenomeno85
07-12-2004, 09:11
è ancora tutto da migliorare


//---------------------------------------------------------------------------



~§~ Sempre E Solo Lei ~§~

kk3z
07-12-2004, 11:26
che cos'è MAX_PATH?
quiMultiByteToWideChar(CP_ACP, 0, sPath, -1, wsPath, MAX_PATH); dovresti fare prima una chiamata di MultiByteToWideChar per sapere quanto deve essere lunga la stringa, poi creare un array di WCHAR e quindi usare di nuovo MultiByteToWideChar per copiare la stringa
Più o meno così: //trovo quanto sia lunga la stringa
int wCaptionLenght = MultiByteToWideChar(CP_ACP, 0, sPath, -1, NULL, 0);
//creo un array
WCHAR *wsPath = new WCHAR[wCaptionLenght];
//copio la stringa
MultiByteToWideChar(CP_ACP, 0, sPath, -1, wsPath, wCaptionLenght);
ciao

Fenomeno85
07-12-2004, 12:04
Originariamente inviato da kk3z
che cos'è MAX_PATH?
quiMultiByteToWideChar(CP_ACP, 0, sPath, -1, wsPath, MAX_PATH); dovresti fare prima una chiamata di MultiByteToWideChar per sapere quanto deve essere lunga la stringa, poi creare un array di WCHAR e quindi usare di nuovo MultiByteToWideChar per copiare la stringa
Più o meno così: //trovo quanto sia lunga la stringa
int wCaptionLenght = MultiByteToWideChar(CP_ACP, 0, sPath, -1, NULL, 0);
//creo un array
WCHAR *wsPath = new WCHAR[wCaptionLenght];
//copio la stringa
MultiByteToWideChar(CP_ACP, 0, sPath, -1, wsPath, wCaptionLenght);
ciao

dove sta MAX_PATH? :mbe: cmq la lunghezza la voglio fissa dato che poi salvo su file binario.

~§~ Sempre E Solo Lei ~§~

kk3z
07-12-2004, 17:53
void SetWallpaper(char* sString){
HRESULT hr;
IActiveDesktop *pActiveDesktop;
char sPath[MAX_PATH];
WCHAR wsPath[MAX_PATH];
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pActiveDesktop);
if(SUCCEEDED(hr)){
COMPONENTSOPT copt;
ZeroMemory(&copt, sizeof(copt));
copt.dwSize = sizeof(COMPONENTSOPT);
copt.fEnableComponents = TRUE;
copt.fActiveDesktop = TRUE;
hr = pActiveDesktop->SetDesktopItemOptions(&copt, 0);
if(SUCCEEDED(hr)){
strcpy(sPath, sString);
MultiByteToWideChar(CP_ACP, 0, sPath, -1, wsPath, MAX_PATH);
pActiveDesktop->SetWallpaper(wsPath,0);
pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
}
pActiveDesktop->Release();
}
CoUninitialize();
}


se max_path non è abbastanza grande?

Fenomeno85
07-12-2004, 18:07
Originariamente inviato da kk3z
void SetWallpaper(char* sString){
HRESULT hr;
IActiveDesktop *pActiveDesktop;
char sPath[MAX_PATH];
WCHAR wsPath[MAX_PATH];
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pActiveDesktop);
if(SUCCEEDED(hr)){
COMPONENTSOPT copt;
ZeroMemory(&copt, sizeof(copt));
copt.dwSize = sizeof(COMPONENTSOPT);
copt.fEnableComponents = TRUE;
copt.fActiveDesktop = TRUE;
hr = pActiveDesktop->SetDesktopItemOptions(&copt, 0);
if(SUCCEEDED(hr)){
strcpy(sPath, sString);
MultiByteToWideChar(CP_ACP, 0, sPath, -1, wsPath, MAX_PATH);
pActiveDesktop->SetWallpaper(wsPath,0);
pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
}
pActiveDesktop->Release();
}
CoUninitialize();
}


se max_path non è abbastanza grande?

hai ragione :( ... mi sa che per quello si rimedia è per l'errore che non capisco perchè :(

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-12-2004, 14:13
cionci trovato che può essere?

~§~ Sempre E Solo Lei ~§~

cionci
08-12-2004, 16:21
Originariamente inviato da kk3z

se max_path non è abbastanza grande?
MAX_PATH è per definizione abbastanza grande...visto che è la massima lunghezza che può assumere un path in Windows ;)

cionci
08-12-2004, 16:29
Il problema è probabilmente qui:

fseek(fp, i*sizeof(nome), 0);
fread(&nome,sizeof(nome),1,fp);
strcpy(supp,"C:\\wallpaper\\");
strcat(supp,nome);

Le stringhe in un file di testo si preferisce non leggerle con fread e fwrite...

Usa fgets e fputs...

Fenomeno85
08-12-2004, 19:21
Originariamente inviato da cionci
Il problema è probabilmente qui:

fseek(fp, i*sizeof(nome), 0);
fread(&nome,sizeof(nome),1,fp);
strcpy(supp,"C:\\wallpaper\\");
strcat(supp,nome);

Le stringhe in un file di testo si preferisce non leggerle con fread e fwrite...

Usa fgets e fputs...

ma io salvo sempre a blocchi :wtf:

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-12-2004, 19:56
si mi si sputtana proprio la lettura eppura ho fatto tutto senza grafica e questo diavolo di problema non si pone :muro:

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-12-2004, 20:16
assurdo faccio scorrere tutto il file e visualizzo solo il nome e funziona :muro: nella funzione no :muro:

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-12-2004, 20:51
ma vadavia i ciap colpa che mi son dimenticato fclose nella funzione della selezione dell'immagine. Tutto funziona!!

~§~ Sempre E Solo Lei ~§~

cionci
08-12-2004, 22:28
Comunque ripeto...salva e leggi con fputs e fgets... Se fai come fai tu il file potrebbe non solo essere illeggibile con un editor di testo, ma se salta un carattere di fine stringa (che viene memorizzato nel file) ti si bocca tutto (per colpa di strcat)...

Fenomeno85
09-12-2004, 17:04
Originariamente inviato da cionci
Comunque ripeto...salva e leggi con fputs e fgets... Se fai come fai tu il file potrebbe non solo essere illeggibile con un editor di testo, ma se salta un carattere di fine stringa (che viene memorizzato nel file) ti si bocca tutto (per colpa di strcat)...

cionci ti ricordi la funzione che mi hai dato per fare un parsing della cartella? ma come faccio a fargli fare un parser di una cartella che voglio io senza che debba per forza farci girare il programma al suo interno?

~§~ Sempre E Solo Lei ~§~

Fenomeno85
09-12-2004, 17:15
Originariamente inviato da Fenomeno85
cionci ti ricordi la funzione che mi hai dato per fare un parsing della cartella? ma come faccio a fargli fare un parser di una cartella che voglio io senza che debba per forza farci girare il programma al suo interno?

~§~ Sempre E Solo Lei ~§~

niente lascia stare trovato

~§~ Sempre E Solo Lei ~§~