View Full Version : [c++] errore pezzo di codice
sto realizzando un programma che cambia lo sfondo del desktop. Questo è il codice:
#include <Windows.h>
#include <WinInet.h>
#include <ShlObj.h>
//Main window procedure WinMain
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iShowCmd)
{
CoInitialize (NULL) ;
HRESULT hr;
IActiveDesktop *pActiveDesktop;
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);
//Insert code to call the IActiveDesktop methods
LPCWSTR wcPath = L"Insert File Path Here" ;
if (pActiveDesktop -> SetWallpaper (wcPath, 0) != S_OK)
{
//The method has failed...
}
// Call the Release method
pActiveDesktop -> ApplyChanges (AD_APPLY_ALL) ;
pActiveDesktop->Release();
CoUninitialize () ;
return 0 ;
}
ma nella riga in bold mi da questo errore
11 C:\Documents and Settings\xxxx\Desktop\progetto\main.cpp `IActiveDesktop' undeclared (first use this function)
come la devo dichiarare IActiveDesktop ?
come la devo dichiarare IActiveDesktop ?Il tuo codice così come è compila senza problemi sul VC++.net 2003.
variabilepippo
26-08-2007, 16:10
Probabilmente stai usando MinGW (GCC), in tal caso l'interfaccia IActiveDesktop non risulta dichiarata (http://www.developpez.net/forums/showthread.php?t=172254) negli header del compilatore.
Per cambiare lo sfondo del desktop ti conviene richiamare la funzione SystemParametersInfo con il parametro SPI_SETDESKWALLPAPER.
Probabilmente stai usando MinGW (GCC), in tal caso l'interfaccia IActiveDesktop non risulta dichiarata (http://www.developpez.net/forums/showthread.php?t=172254) negli header del compilatore.
Per cambiare lo sfondo del desktop ti conviene richiamare la funzione SystemParametersInfo con il parametro SPI_SETDESKWALLPAPER.
ma con quella funzione non posso inpostare una immagine jpg.. o sbaglio?
per andbin.. allora cambio compilatore
ps:non capisco il francese
ma con quella funzione non posso inpostare una immagine jpg.. o sbaglio?In generale, e questo vale anche facendolo "a mano" dalle proprietà dello schermo, si può impostare una immagine in un formato diverso dal .bmp (ad esempio .jpg/.png) ma solo se è attivato Active Desktop (alzi la mano chi ce l'ha attivato .... io no :p ).
allora cambio compilatoreSì, forse è meglio: VC++ 2005 Express ad esempio.
Probabilmente stai usando MinGW (GCC), in tal caso l'interfaccia IActiveDesktop non risulta dichiarata (http://www.developpez.net/forums/showthread.php?t=172254) negli header del compilatore.
Per cambiare lo sfondo del desktop ti conviene richiamare la funzione SystemParametersInfo con il parametro SPI_SETDESKWALLPAPER.
potresti spiegarmi come dichiararla negli header del compilatore ? :D
variabilepippo
27-08-2007, 13:05
Basta includere windows.h e linkare libuser32.
potresti spiegarmi come dichiararla negli header del compilatore ? :D#include <Windows.h>
lho inclusa come potete vedere dal codice. Ma dev c++ da errore per quanto riguarda IActivedesktop come da codice postato
variabilepippo
27-08-2007, 14:10
Ma dev c++ da errore per quanto riguarda IActivedesktop come da codice postato
Ma non ti è stato detto che Dev-C++ NON ha il supporto per IActivedesktop?
I suggerimenti si riferivano a SystemParametersInfo.
Ma non ti è stato detto che Dev-C++ NON ha il supporto per IActivedesktop?
I suggerimenti si riferivano a SystemParametersInfo.
ah ok scusate
ma vc++ 2005 express mi da un errore per quanto riguarda windows.h.. non la trova :doh:
ma vc++ 2005 express mi da un errore per quanto riguarda windows.h.. non la trova :doh:Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK (http://msdn2.microsoft.com/it-it/express/aa700755.aspx)
variabilepippo
27-08-2007, 14:20
ma vc++ 2005 express mi da un errore per quanto riguarda windows.h.. non la trova
Per sviluppare programmi WIN32 con Visual C++ 2005 Express devi installare il Platform SDK:
utilizzare Visual C++ Express Edition con Microsoft Platform SDK (http://msdn2.microsoft.com/it-it/library/ms235626(VS.80).aspx).
ok grazie ho risolto.
ma come la richiamo la funzione
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iShowCmd)
da un main? Non so che parametri fornire
variabilepippo
27-08-2007, 16:33
Non capisco il senso della tua domanda... La funzione WinMain "è" il main!
Compila il programma e lancia l'eseguibile.
Non capisco il senso della tua domanda... La funzione WinMain "è" il main!
Compila il programma e lancia l'eseguibile.
ah ok.
ma quando tento di avviare il debug ricevo questo errore :muro:
Collegamento in corso...
MSVCRTD.lib(crtexe.obj) : error LNK2019: riferimento al simbolo esterno _main non risolto nella funzione ___tmainCRTStartup
C:\Documents and Settings\rsk\Desktop\cambiosfondo\prova\Debug\prova.exe : fatal error LNK1120: 1 esterni non risolti
variabilepippo
27-08-2007, 16:54
Quale modello di progetto hai scelto nella creazione del programma? Applicazione CONSOLE?
Quale modello di progetto hai scelto nella creazione del programma? Applicazione CONSOLE?
ora ho fatto progetto windows , ho lasciato tutto cio' che c'era e ho aggiunto la funzione winmain ma ancora errori :muro:
Compilazione in corso...
stdafx.cpp
Compilazione in corso...
desk.cpp
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(201) : error C3861: 'CoInitialize': identificatore non trovato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(204) : error C2065: 'IActiveDesktop': identificatore non dichiarato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(204) : error C2065: 'pActiveDesktop': identificatore non dichiarato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(207) : error C2065: 'CLSID_ActiveDesktop': identificatore non dichiarato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(207) : error C2065: 'CLSCTX_INPROC_SERVER': identificatore non dichiarato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(208) : error C2065: 'IID_IActiveDesktop': identificatore non dichiarato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(207) : error C3861: 'CoCreateInstance': identificatore non trovato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(212) : error C2227: l'elemento a sinistra di '->SetWallpaper' deve puntare a un tipo classe, struttura, unione o generico
il tipo è ''unknown-type''
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(218) : error C2227: l'elemento a sinistra di '->ApplyChanges' deve puntare a un tipo classe, struttura, unione o generico
il tipo è ''unknown-type''
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(218) : error C2065: 'AD_APPLY_ALL': identificatore non dichiarato
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(219) : error C2227: l'elemento a sinistra di '->Release' deve puntare a un tipo classe, struttura, unione o generico
il tipo è ''unknown-type''
c:\documents and settings\rsk\desktop\desk2\desk\desk\desk.cpp(221) : error C3861: 'CoUninitialize': identificatore non trovato
Il log di generazione è stato salvato in 'file://c:\Documents and Settings\rsk\Desktop\desk2\desk\desk\Debug\BuildLog.htm'
desk - 12 errore/i, 0 avviso/i
potete provare se riuscite a farlo funzionare? :cry:
#include <Windows.h>
#include <WinInet.h>
#include <ShlObj.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iShowCmd)
{
CoInitialize (NULL) ;
HRESULT hr;
IActiveDesktop *pActiveDesktop;
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);
//Insert code to call the IActiveDesktop methods
LPCWSTR wcPath = L"%SYSTEMROOT%\\Web\\Wallpaper\\Amico.jpg" ;
if (pActiveDesktop -> SetWallpaper (wcPath, 0) != S_OK)
{
//The method has failed...
}
// Call the Release method
pActiveDesktop -> ApplyChanges (AD_APPLY_ALL) ;
pActiveDesktop->Release();
CoUninitialize () ;
return 0 ;
}
variabilepippo
28-08-2007, 10:24
Ho compilato il sorgente da linea di comando (cl /EHsc test.cpp ole32.lib) senza riscontrare problemi. Non avendo Visual C++ Express 2005 non so quali tipologie di progetto sono disponibili.
Ho compilato il sorgente da linea di comando (cl /EHsc test.cpp ole32.lib) senza riscontrare problemi. Non avendo Visual C++ Express 2005 non so quali tipologie di progetto sono disponibili.
lo crea l'exe ?
variabilepippo
28-08-2007, 12:50
lo crea l'exe ?
Sì, non vedo perché non dovrebbe... Crea un eseguibile di 45.056 bytes.
scusa un ultima domanda :ave:
che compilatore usi?
grazie per la pazienza ma sto iniziando da poco con c++
variabilepippo
28-08-2007, 14:52
che compilatore usi?
Visual C++ in versione "linea di comando", integrato con Code::Blocks.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.