PDA

View Full Version : [C++]Sintassi struttura


register
03-03-2008, 14:49
Salve ragazzi,

sto programmando in C++ in ambiente Visual C++...

volevo chiedervi il significato in questa struttura:

struct FEReadTagsThreadPara
{
bool bFinish;
bool bRunning;
FEDM_ISCReader* m_pReader;
HWND hwnd;
FEReadTagsThreadPara(): bFinish(false), bRunning(false),
m_pReader(NULL), hwnd (NULL){}
};


dell'ultima dichiarazione.
Questa struttura è definita in un header file, ed è richiamata mediante puntatore in un file .cpp!

Grazie.

cionci
03-03-2008, 16:51
E' il costruttore della struttura, in C++ le struct, al pari delle classi possono avere anche un costruttore.
Quello che appare dopo i due punti è la lista di inizializzazione del costruttore.

register
04-03-2008, 09:25
Grazie cionci,

e ti posso chiedere un'altra cosa, stavolta riguardante le classi?

Io ho in un Header file questa classe e ti chiedo in particolare delle funzioni scritte in rosso...è normale che ne vengano dichiarate così tante nella stessa classe e con lo stesso nome, con l'unica differenza che cambi qualche parametro d'ingresso?:

class FEDM_ISCReader : public FEDM_DataBase
{
// public functions
public:

FEDM_ISCReader(); // constructor
virtual ~FEDM_ISCReader(); // destructor

// main function for XML serialization
virtual int Serialize(bool bRead, char* sFileName);

#ifdef _FEDM_MFC_SUPPORT
// for proprietary file-I/O
virtual int Serialize(CArchive& ar, int iMemType);
#endif

// main communication function
virtual int SendProtocol(UCHAR ucCmdByte);

// set the port handle in reader object of FEISC
// must be done before use of all other functions
int SetPortHnd(int iPortHnd);
int GetPortHnd();

int SetReaderType(UCHAR ucType);

char* GetTagName(UCHAR ucTagType);

// change the protocol type (STANDARD or ADVANCED)
// STANDARD is preset
int SetProtocolFrameSupport(UINT uiType);
int GetProtocolFrameSupport();

// get the last protocol string (frame and data)
int GetLastProt(char* sID, char* sProt);
// get the last error code
int GetLastError();
// get the last status byte
int GetLastStatus();

// get error text
int GetErrorText(char* cErrorText, int iErrorCode);
// get status text
int GetStatusText(char* cStatusText, UCHAR ucStatus);

// function to find the baudrate and frame of reader
virtual int FindBaudRate(bool* pStop = NULL, int iTimeout = 300, int iFrameSupport = 0);

// get specific data from table
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, bool* bData);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, UCHAR* ucData);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, UCHAR* ucData, int iDataBufLen);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, UINT* uiData);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, __int64* i64Data);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, char* cData, int iDataBufLen);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, string& sData);
#if defined(_FEDM_MFC_SUPPORT) || defined(__BORLANDC__)
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID, CString& sData);
#endif

// set specific data in table
int SetTableData(int iIdx, UINT uiTableID, UINTuiDataID, bool bData);
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID, UCHAR
ucData);
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID, UCHAR*
ucData, int iDataBufLen);
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID, UINT uiData);
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID, __int64 i64
Data);
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID, string sData);
#if defined(_FEDM_MFC_SUPPORT) || defined(__BORLANDC__)
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID, CString sData);
#endif

// get data block from table
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID,
int iBlockNr, UCHAR* ucData, int iDataBufLen);
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID,
int iBlockNr, string& sData);

#if defined(_FEDM_MFC_SUPPORT) || defined(__BORLANDC__)
int GetTableData(int iIdx, UINT uiTableID, UINT uiDataID,
int iBlockNr, CString& sData);
#endif

// set data block in table
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID,
int iBlockNr, UCHAR* ucData, int iDataBufLen);
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID,
int iBlockNr, string sData);

#if defined(_FEDM_MFC_SUPPORT) || defined(__BORLANDC__)
int SetTableData(int iIdx, UINT uiTableID, UINT uiDataID,
int iBlockNr, CString sData);
#endif

// verify read/write-data block(s) in table
int VerifyTableData(int iIdx, UINT uiTableID, int iBlockNr, int iBlockCnt);

// copy complete byte arrays from source to destination inside a table
// source/destination can be: FEDM_ISC_DATA_TxDB, FEDM_ISC_DATA_RxDB
int CopyTableData(int iIdx, UINT uiTableID, int iSrcDataID, int iDstDataID);

// get table-index of specific data from table
int FindTableIndex(int iStartIdx, UINT uiTableID, UINT uiDataID, bool bData);
int FindTableIndex(int iStartIdx, UINT uiTableID, UINT uiDataID, UCHAR ucData);
int FindTableIndex(int iStartIdx, UINT uiTableID, UINT uiDataID, UINT uiData);
int FindTableIndex(int iStartIdx, UINT uiTableID, UINT uiDataID, __int64 i64Data);
int FindTableIndex(int iStartIdx, UINT uiTableID, UINT uiDataID, string sData);
#if defined(_FEDM_MFC_SUPPORT) || defined(__BORLANDC__)
int FindTableIndex(int iStartIdx, UINT uiTableID, UINT uiDataID, CString sData);
#endif

// set size of a table
int SetTableSize(UINT uiTableID, int iSize);
int SetTableSize(UINT uiTableID,
int iSize,
int iRxDB_BlockCount,
int iRxDB_BlockSize,
int iTxDB_BlockCount,
int iTxDB_BlockSize);

// get size of a table
int GetTableSize(UINT uiTableID);
// get length of valid data in a table
int GetTableLength(UINT uiTableID);
// set length of valid data in a table if the application has built the table
int SetTableLength(UINT uiTableID, unsigned int uiLength);
// reset length of valid data in a table
int ResetTable(UINT uiTableID, UINT uiDataFlags=0);

// protected functions
protected:
// save the last error or status byte in memory
void SetLastError(int iError);

int Get_0x72_OutputData(unsigned char ucOutN, UCHAR* pOutRec);

// get data for [0xB0], [0xB1], [0xB2], [0xB3] iso command
virtual int Get_0xB0_IsoTableData(UCHAR ucCmdByte, UCHAR* ucData);
virtual int Get_0xB1_IsoTableData(UCHAR ucCmdByte, UCHAR* ucData);
virtual int Get_0xB2_IsoTableData(UCHAR ucCmdByte, UCHAR* ucData);
virtual int Get_0xB3_IsoTableData(UCHAR ucCmdByte, UCHAR* ucData);

// get data for [0xB0][0x??] iso command
virtual int Get_0xB0_0x24_IsoTableData(UCHAR* ucData);
virtual int Get_0xB0_0x27_IsoTableData(UCHAR* ucData);
virtual int Get_0xB0_0x29_IsoTableData(UCHAR* ucData);
virtual int Get_0xB0_0xA1_IsoTableData(UCHAR* ucData);

// get data for [0xB3][0x??] epc command
virtual int Get_0xB3_0x24_IsoTableData(UCHAR* ucData);

// save data in ISO-table after [0xB0], [0xB2] iso command
virtual int Set_0xB0_IsoTableData(UCHAR* ucData, int iLen, int iStatusByte);
virtual int Set_0xB2_IsoTableData(UCHAR* ucData, int iLen, int iStatusByte);

// save data in ISO-table after [0xB0][0x??] iso command
virtual int Set_0xB0_0x23_IsoTableData(UCHAR* ucData, int iLen);
virtual int Set_0xB0_0x25_IsoTableData(UCHAR* ucData, int iLen);
virtual int Set_0xB0_0x26_IsoTableData(UCHAR* ucData, int iLen);
virtual int Set_0xB0_0x2B_IsoTableData(UCHAR* ucData, int iLen);
virtual int Set_0xB0_0x2C_IsoTableData(UCHAR* ucData, int iLen);
virtual int Set_0xB0_0xA0_IsoTableData(UCHAR* ucData, int iLen);

virtual int Set_0xB2_0x2B_IsoTableData(UCHAR* ucData, int iLen);

// save data in BRM-table after [0x21] or [0x22] read buffer
virtual int SetBrmTableData(UCHAR ucMode, UCHAR* ucData);

// save measurement data in CAD-table after [0x68]
virtual int SetCADTableData(UCHAR ucCmd, long* ucData);

virtual int SerializeIn(FEDM_XMLBase* xml, FEDM_XML_TREEITEM* root);
virtual int SerializeOut(FEDM_XMLBase* xml, FEDM_XML_TREEITEM* root);

// data members
protected:
// BRM-table for received data
FEDM_BRMTAB_ARRAY m_BRMTable;

// ISO-table for ISO Host Commands
FEDM_ISOTAB_ARRAY m_ISOTable;

// Channel Analyze Data table for received data
FEDM_CADTable m_CADTable;

unsigned int m_uiBRMTableLength; // length of valid data in BRM-table
unsigned int m_uiISOTableLength; // length of valid data in ISO-table

// for temporary protocol data
UCHAR m_ucData[4100];
long m_nData[516];
};


Grazie.

cionci
04-03-2008, 09:39
Certo, è normale, il compilatore sceglierà la funzione corretta in base al tipo e alla quantità dei parametri.

register
05-03-2008, 09:20
Ah, grazie! Ho capito!

Non me le ricordo proprio più queste cose!

Ma per caso sai anche come fare a capire da un progetto in Microsoft Visual Studio C++ 6.0 già compilato ed eseguito se questo è un progetto Win32 Application, Win32 Console, MFC AppWizard...

Ti spiego il perchè:

da un progetto che c'è in un SDK, con gli eseguibili e i codici, io devo estrapolare solo i file .cpp e .h (di alcuni solo alcune parti di codice) che mi servono e crearmene uno nuovo sulla base di questi, e con un'interfaccia modificata.

Perciò vorrei sapere come si fa a sapere che tipo di progetto è, perchè ho intenzione di seguire questo procedimento:

una volta visto qual è, ne creo uno nuovo dello stesso tipo e ci aggiungo i files che mi servono, e ne creo di nuovi in cui inserire le parti di codice estrapolati da quelli originali...dopodichè adatto l'interfaccia originale al mio progetto, compilo ed eseguo!

Va bene questo procedimento?
Ed esiste un modo per farlo?
Perchè io avevo provato in questo modo:

Avevo creato un nuovo progetto Win32Application ed avevo aggiunto alle cartelle header files e suorce files quelli che mi servivano...solo che quando vado a compilare...mi dice che alcuni header files (che sono quelli che non si trovano nella stessa cartella del progetto - così come nel progetto originale) non possono essere aperti, ed io non capisco il perchè.

Mi potresti aiutare?

Grazie

cionci
05-03-2008, 09:43
Se lanciandolo ti apre anche una console testuale allora è Win32 Console...se ha all'interno codice MFC allora è stata creato tramite uno dei wizard MFC, se usa API Win32 per l'interfaccia grafica o qualsiasi altro tipo di framework e non ha una console allora è una Win32 Application.

register
05-03-2008, 10:01
Credo sia Win32 Application allora...quando compilo ed eseguo mi esce direttamente l'interfaccia grafica (tipo finestra windows).

Nel workspace ha 3 schede:
ClassView, ResourceView e FileView.

Nella prima ci sono le varie classi;
Nella seconda 5 cartelle: Dialog, Icon, Menu, String Table, Version.
Nella terza 4 cartelle: Source Files, Header Files, Resource Files e External Dependencies.

Nella terza ci sono due file .ico e 1 .rc2!
Nella prima, oltre ai file .cpp, ce n'è uno .rc che fa aprire la scheda Resource View quando si clicca sopra.

Ps. cosa mi puoi dire invece riguardo al fatto che non mi vede alcuni Header files? io ho provato anke ad inserirli nella stessa cartella del progetto mas ugualmente non va!

Grazie.

banryu79
05-03-2008, 10:10
Ps. cosa mi puoi dire invece riguardo al fatto che non mi vede alcuni Header files? io ho provato anke ad inserirli nella stessa cartella del progetto mas ugualmente non va!

Grazie.

Una volta è successo anche a me con VS2003...

Nel mio caso i file .h erano fisicamente presenti nella cartella, ma per qualche ragione VisualStudio non li aveva annoverati nel suo file di progetto.

E' bastato correggere quello, nello specifico nel mio caso:

1 - file di progetto (.vcproj) aperto con un editor di testo
2 - tra i tag <Files></Files>
3 - qui:

// inside .vcproj file...
...
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath="GFNEST.H">
</File>
<File
RelativePath="NPREP.H">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
</Filter>
...


Controlla siano elencati tutti i tuoi HEADER files, se ne manca qualcuno lo aggiungi a mano.

Ciao :)

register
05-03-2008, 10:39
Ciao Banryu,

gli header files erano già tutti elencati...mi son messo a vedere un po' se c'era qualcosa che non andava ma non ho trovato niente.

e purtroppo ancora non riesce a vedere i mniei header files....:cry:

banryu79
05-03-2008, 11:48
Ciao Banryu,

gli header files erano già tutti elencati...mi son messo a vedere un po' se c'era qualcosa che non andava ma non ho trovato niente.

e purtroppo ancora non riesce a vedere i mniei header files....:cry:
Strano, allora non saprei.
Sei sicuro che non dipenda da altro?

Magari puoi andare nella cartella del progetto, e ti apri a mano ogni file di configurazione del progetto con un editor testuale; alcuni file saranno in formato binario, ma quelli testuali li puoi leggere e verificare che eventuali sezioni che abbiano a che fare con l'elencazione dei file sorgenti del progetto contengano tutti gli headers.

Non so se in alternativa potresti creare ex-novo un progetto vuoto per poi importare tramite Visual Studio i sorgenti... in modo che VS ti ricrei i file di progetto in modo corretto, sempre ammesso che il problema dipenda da questo.

register
05-03-2008, 12:21
Non so se in alternativa potresti creare ex-novo un progetto vuoto per poi importare tramite Visual Studio i sorgenti... in modo che VS ti ricrei i file di progetto in modo corretto, sempre ammesso che il problema dipenda da questo.


non so! a me pare ke è quello ke ho fatto...
ho creato proprio un progetto nuovo e da quì ho aggiunto tutti i file ke mi servivano..però non va!!! :cry: :cry: :cry: :cry: TRISTE ASSAIIIII

cionci
05-03-2008, 12:28
non so! a me pare ke è quello ke ho fatto...
ho creato proprio un progetto nuovo e da quì ho aggiunto tutti i file ke mi servivano..però non va!!! :cry: :cry: :cry: :cry: TRISTE ASSAIIIII
Probabilmente servono altre direttive...ad esempio quali librerie linkare.

register
05-03-2008, 14:52
Capito, Grazie!

Cerco di fare quante più prove possibili e vedrò...se andrà bene posterò la soluzione qui...in caso contrario....che tristezza!!! :cry: :cry:

banryu79
05-03-2008, 15:03
Nella prima ci sono le varie classi;
Nella seconda 5 cartelle: Dialog, Icon, Menu, String Table, Version.
Nella terza 4 cartelle: Source Files, Header Files, Resource Files e External Dependencies.



Controlla bene anche queste ;)