Newsgroup: it.comp.programmare.win32
Titolo: creazione di una classe

Ciao, sto iniziando adesso a studiare il C++ sul libro di Stanley B. Lippman
"C++ Corso di Programmazione", conosco il C e mi puo' aiutare per i costrutti,i
tipi di dati i puntatori ecc..., ma non mi e' d'aiuto per
quel che riguarda le classi...
il problema e' il seguente: per imparare ho creato una classe
chiamata Scheduler dove dentro ci vorrei mettere le funzioni dell'oggetto
ITaskScheduler
dichiarato dentro mstask.h
vorrei creare una classe mia (credo e' il miglior modo per imparare)che mi
permetta
di creare, modificare o distruggere un task
nel .h metto:
#include <iostream.h>
#include <mstask.h> 
# ifndef _SCHEDULER_
# define _SCHEDULER_
class Scheduler
{
	public:
		/* costruttore */
		Scheduler(char *);
		/* inizializzazione del modello COM dell'oggetto e 
		   creazione di un oggetto Task Scheduler */
		int Init();
	protected:
		char *NomeTask; /* nome del task da creare o modificare... */
};
#endif
nel .cpp metto:
#include "Scheduler.h"
Scheduler::Scheduler(char *ptszNomeTask)
{
	(*ptszNomeTask) ? NomeTask = ptszNomeTask : NomeTask = NULL;
}
int Scheduler::Init()
{
 
	HRESULT hr = ERROR_SUCCESS;
        if (!*NomeTask) return PTNULL; /* puntatore nullo */ 
	ITaskScheduler *pITS;
        hr = CoInitialize(NULL);
	if (SUCCEEDED(hr))
	{
	    hr = CoCreateInstance(CLSID_CTaskScheduler,
				   NULL,
				   CLSCTX_INPROC_SERVER,
				   IID_ITaskScheduler,
				   (void **) &pITS);
		 if (FAILED(hr))
		 {
			CoUninitialize();
			return (1);
		 }
	}
	else
	{
		 return (1);
	}
	return (0);
}
Gli errori (3) che mi da il compilatore (MS Visual C++) e' il seguente:
inking...
Scheduler.obj : error LNK2001: unresolved external symbol _CLSID_CTaskScheduler
Scheduler.obj : error LNK2001: unresolved external symbol _IID_ITaskScheduler
Debug/Scheduler.exe : fatal error LNK1120: 2 unresolved externals
cioe' lui non riesce a trovare le definizioni delle due costanti
_CLSID_CTaskScheduler e
_IID_ITaskScheduler...
Dove sbaglio????
ho iniziato da poco e non riesco a capire l'errore, ma neanche vorrei lasciar 
perder questa classe che sto creando perche' e' mi invoglia a studiare il c++
e devo risolvere questo problema...
Ciao a tutti e grazie in anticipo...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:c7267b366dabe17bf6...@mygate.mailgate.org...

            ^^^^
Questo è un handle di window. Che tipo di progetto hai iniziato quando hai
creato il progetto? Questo handle puoi utilizzarlo in modalità GDI (Grafica)
per cui probabilmente stai programmando in modalità consolle o non hai
utilizzato la sintassi giusta.Per questo motivo ti da l'errore perchè cerca
il WinMain e trova il main o viceversa; Dovresti andare in project, setting,
link, ed eliminare la dicitura SUBSYSTEM/WINDOW o SUBSYSTEM/CONSOLLE e
ricompilare. Fammi sapere comunque se vuoi lavorare in modalità grafica o in
modalità consolle perchè in questo codice ci sono delle incongruenze.Se
dovesse funzionare fammelo sapere.
CIAO.


 Si e' vero stavo lavorando in modalita' consolle,pero' ho tolto quella
 stringa SUBSYSTEM/CONSOLLE pero' mi da lo stesso errore, il fatto e'
che prima
 avevo creato un progetto inn modalita' consolle,avevo creato un file 
.cpp e senza creare una classe avevo messo all'interno del main:
HRESULT hr = ERROR_SUCCESS;
ITaskScheduler *pITS;
avevo implementato la stessa funzione,che ora mi da errore dentro la mia
 classe, e tutto era andato bene...
i problemi sono sorti quando ho voluto creare la mia classe e 
all'interno utilizzare le funzioni dell'oggetto ITaskScheduler...
ciao stefano


 ha scritto nel messaggio
news:a501afe200ae3db890...@mygate.mailgate.org...

Potrebbe essere un problema di dichiarazione o di costruttore della classe,
o di inizializzazione della stessa.... Se per te non è un problema prova a
postarmi integralmente il sorgente del progetto altrimenti diventa molto
difficile e improbabile trovare l'errore.
Ciao.
Stefano (Omonimo);


Hai ragione, senza codice non e' molto comprensibile, ti ringrazio 
dell'interesse in anticipo, ed eccoti il codice...
ho creato un file scheduler.cpp,scheduler.h e appo.cpp per utilizzare 
le funzioni della classe scheduler...
scheduler.h
#include <iostream.h>
#include <mstask.h>
#include <objbase.h>
#include <wtypes.h>
 
#define SUX 0;
#define PTNULL -1; /* il puntatore e' nullo, cioe' al costruttore e'
stato passato un valore errato */
/* Verifica sulla dichiarazione della classe */
# ifndef _SCHEDULER_
/* Classe non dichiarata due volte */
# define _SCHEDULER_
class  Scheduler
{
 
	public:
		/* costruttore */
		Scheduler(char *ptszNomeTask);
		/* inizializzazione del modello COM dell'oggetto e 
		   creazione di un oggetto Task Scheduler */
		int Init();
		void StampaTask();
	/* mascheramento dell'informazione */	
	protected:
		char *NomeTask;
};
#endif
scheduler.cpp:
#include "Scheduler.h"
Scheduler::Scheduler(char *ptszNomeTask)
{
	(*ptszNomeTask) ? NomeTask = ptszNomeTask : NomeTask = NULL;
}
int Scheduler::Init()
{
 
	HRESULT hr = ERROR_SUCCESS;
 
    if (!*NomeTask) return PTNULL; /* puntatore nullo */ 
	ITaskScheduler *pITS;
	/* inizializzazione della libreria COM */
	hr = CoInitialize(NULL);
	if (SUCCEEDED(hr))
	{
		/* per creare un oggetto task scheduler bisogna PER FORZA richiamare
la CoCreateInstance */
		hr = CoCreateInstance(CLSID_CTaskScheduler,
							  NULL,
							  CLSCTX_INPROC_SERVER,
							  IID_ITaskScheduler,
							  (void **) &pITS);
		 if (FAILED(hr))
		 {
 
			CoUninitialize();
			return 1;
		 }
	}
	else
	{
		 return 1;
	}
	return SUX;
}
void Scheduler::StampaTask()
{
	cout << NomeTask << "\n";
}
file di richiamo appo.cpp:
#include <windows.h>
#include "Scheduler.h"
int main()
{
	char nometask[8] = "Stefano";
	Scheduler myScheduler(&nometask[0]);
	return(0);
}	
-- 
