mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: Qualche domanda sull'Assembler

Qualcuno conosce un buon testo per imparare l'assembler ?
Sapreste anche dirmi dove posso trovare un buon assemblatore ?
Infine qualcuno sa dove si possono trovare le istruzioni MMX
Massimiliano Sist 
si...@grisnet.it

...


Infine qualcuno sa dove si possono trovare le istruzioni MMX
sul mio sito puoi trovare qualcosa sia per quanto riguarda
l'assemblatore free che per il resto. l'indirizzo e` 
http:/
members.tripod.com/~ranger_rg/
il sito non e` ancora a posto al 100%, percio` e` meglio se aspetti
qualche giorno. in edicola trovi Dev o ioProgrammo, che trattano
assembler.
--
[ranger, email: 
ran...@queen.it
]
ICQ# 6585343

Infine qualcuno sa dove si possono trovare le istruzioni MMX
Come sopra: al sito Intel.
Cordialmente,
Gianni Rondinini, programmer and designer at Pierre s.n.c.
e-mail: mailto:
pie...@mail.asianet.it
homepage: 
http://www.geocities.com/Eureka/Plaza/7153
Red Hat Linux user since 9/25/97
Windows NT Server user since 9/19/97
e-mail: mailto:
pie...@mail.asianet.it

manuali portino anche la documentazione di MMX. Fammi sapere se è così.
sulla documentazione non so, ma di sicuro entrambi NON hanno le
istruzioni MMX, esistono solo file di macro che rimpiazzano le
istruzioni. ovviamente non e` la stessa cosa.
--
[ranger, email: 
ran...@queen.it
]
ICQ# 6585343
http://members.tripod.com/%7Eranger_rg/

...


Newsgroup: it.comp.lang.c++
Titolo: Un buon manuale per VC++ 5.0?

Può qualcuno consigliarmi un buon manuale per il visual C++ 5.0 di
Microsoft, infatti, quello che ho acquistato, alla modica cifra di 89.000
lire, mi lascia molto perplesso.
L'autrice(!) del manuale sviscera in esso esempi e dimostrazioni di utilizzo
di MFC, come se si rivolgesse a programmatori già abbastanza esperti di
VC++.
Voglio precisare che non sono proprio un novellino, sono iscritto all'ultimo
anno di ingegneria informatica con 26(!) esami all'attivo e domino
tranquillamente i linguaggi C++ (dos) visual basic, fortran, ladder (per
plc), sfc, java, assembly (anche MMX), ecc.
Concludendo, ho mi sono instupidito di colpo, oppure questo manuale e
scritto davvero male (almeno per chi si avvicina solo ora a VC++ 5.0 e MFC
4.2).
Sarò molto grato a chi vorra consigliarmi.

anno di ingegneria informatica con 26(!) esami all'attivo e domino
Hmmm, non so bene cosa ci sia in Italiano, e con che
qualita` di traduzione.  Almeno in inglese, una prima
risorsa da verificare e` sempre il sito:
 
http://www.mcp.com/personal
dove puoi farti una "personal library" di testi dei vari
editori dell'MCP, da consultare gratuitamente in rete.
Non sono testi grandiosi, ma almeno puoi esaminare
in dettaglio quel che (eventualmente) puoi acquistare
(forse puoi anche permetterti di non acquistarlo e di
leggere solo in rete, ma, secondo me, non e` pratico
con le velocita` di rete tipiche di oggi -- un libro e`
ancora troppo piu` comodo).
Di testi in merito che ho esaminato personalmente, il
migliore che ho visto e` della WROX Press (la qualita`
dei loro testi e` uniformemente alta), "Beginning Visual
C++" di Ivor Horton.
Alex
Newsgroup: it.comp.lang.c++
Titolo: How can I solve this?Daniel

This is what I have to do:
Develop an interactive (on line) program in C to produce market information
about the clients of a certain company. The client database (file) contains
the following data.
CLIENT CODE: a number from 1...99(e.g. 10)
CLIENT NAME: 30 characters including spaces (e.g. "Mary Grary" ):
CLIENT ADDRESS: 40 characters including spaces (e.g. "115 Cavendish St.
London"):
CITY: 10 characters without spaces
CLIENT INCOME: a float grater then 0.0.
This program should contain also a menu providing the following options:
1.Given a certain City  a full list of all clients living in that city
should be printed. The output should present full information about each
client (code, name, address and income). At the end, a summary presenting
the average income and number of clients  living in the given city .
2.Print the city (cities) with the highest total income.
3.Print the city (cities) where the company has the highest and the
smallest number of clients.
4.Given a CLIENT CODE print the details about that client if it exists.
5.A quit option should allow the user to leave the program.

Pheraps writing a program doing such tasks?
Just kidding,
    CS
--
Cristiano Sadun - Software Engineering and Consulting
***********Remove NOSPAM from address to reply***********
*********************************************************
"God is Real - unless declared Integer"
Newsgroup: it.comp.lang.c++
Titolo: Certificazione MCSD e sviluppo s.o.

Ho intenzione di certificarmi Microsoft Certified Solution's Developer
ma quello che chiedo č: questa qualifica mi da il know-how necessario
per poter progettare sistemi operativi?
Se la risposta fosse negativa come dovrei integrare tale qualifica,
ovvero cosa altro dovrei studiare per poter progettare anche sistemi
operativi oltre che applicativi comuni?
Per la risposta mandate una email a 
song...@mclink.it
.
Grazie!

 operativi oltre che applicativi comuni?
magari leggere i sorgenti e la documentazione di qualche vero sistema 
operativo. 
e qualche buon libro al riguardo, che non riporti "microsoft press" 
sulla copertina... ad esempio i classici silberschatz e tanenbaum.
questo però non serve a integrare la qualifica di cui parli.
serve a sostituirla :-)
giulio
-- 
Boycott Microsoft: 
http://www.boycott-ms.org/

 pelle!
Parole sante...
EMG
Newsgroup: it.comp.lang.c++
Titolo: Programmazione modem

 qualcuno mi puo' dare una mano, ringrazio molto!
Salutoni a tutti!
Il +++ è una sequenza che fa commutare il modem dal modo dati al modo
comandi.
I modi per hanguppare sono due:
1) inviare "+++", attendere che il modem risponda con "OK<CR><LF>", quindi
inviare "ATH0<CR>" ed attendere che il modem risponda con "NO
CARRIER<CR><LF>"
2) programmare il modem in modo che il suo "aggancio" della linea tracci lo
stato del pin di controllo di seriale DTR. Mi pare che il comando da dare
(prima della connessione) sia AT&D2. A quel punto, una transizione negativa
di DTR provoca il riaggancio.
Spero di esserti stato utile...
Ciao
		Alberto.

CARRIER<CR><LF>"
ma i tre +++ non vanno mica temporizzati?
grazie, ciao
-- Hiroshima '45, Tjernobil '86, Windows '95  - Scout / Success
   /\---/\                            /------\     /
max...@hotmail.com
 
  /       \  /---\ /-\v/-\/-\v/-\----\|   #   | of | *demos*mailing*
 /         \/  =  \\     /\     /  --||      / Ooze| *motorbikes*
/           \      \     \/     \   --\       \Labs| *superbike*
\___I___I___/__I___/__I__/\__I__/_____/___I___/    \
max...@iol.it
 
WWWdotLOGICOMdotITslashPERSONALslashMAXXERslash
Newsgroup: it.comp.lang.c++
Titolo: #ifdef in header files

Salve a tutti. Sto scrivendo una libreria statica in C++.
Dato che vorrei avere la possibilità di modificare alcune funzioni della 
libreria a seconda di come setto delle #define nei programmi che la 
utilizzano (e che voglio avere una sola versione della libraria compilata), 
ho pensato di usare metodi inline nelle classi della libreria che includono 
dei #ifdef.
es:
myLib.h:
//---------------------------------------
[...]
class Classe {
public:
inline static void Metodo()    {
#ifdef MIA_DEFINIZIONE
[...]
#else
[...]
#endif
}
};
//--------------------------------
Così facendo credo che il metodo Metodo() non finisca compilato insieme con 
myLib.cpp,
dandomi così la possibilità di settare MIA_DEFINIZIONE nei programmi 
"client".
Poi però ho pensato: e se ho una situazione come questa cosa succede:
myLib.h:
//---------------------------------------
[...]
class Classe {
public:
inline static void Metodo()    {
#ifdef MIA_DEFINIZIONE
[...]
#else
[...]
#endif
}
static void Metodo2();
};
//--------------------------------
myLib.cpp
//---------------------------------------
#include "myLib.h"
void Classe::Metodo2()
{
[...]
Metodo();
}
//--------------------------------
In questo caso se Metodo() è inline e viene copiato nel codice di Metodo2() 
in myLib.cpp,
allora ho belle che perso la possibilità di settare MIA_DEFINIZIONE nei 
programmi client.
Qualcuno sa se questa analisi è corretta o se c'è qualche sistema per 
risolvere il problema? (Io non sono granchè esperto della teoria che sta 
sotto a queste questioni...)

 sotto a queste questioni...)
L'analisi è corretta. Non usare #define! Probabilmente in questa 
situazione puoi utilizzare i template.
E.
Newsgroup: it.comp.lang.c++
Titolo: Array dinamico o casino dinamico ?

Ho costruito questa classe per rappresentare il solito vettore di
double:
 class Serie 
{	
	friend double operator*(Serie& ,Serie& );
	friend Serie operator-(Serie& ,Serie& );
	friend Serie operator+(Serie& ,Serie& );
 
	protected:
		double* iniz;
		int lunghezza;
 
	public:
		void Take(int  , int, Serie& );
		Serie();
		Serie(int);
		Serie(const Serie&);
		~Serie();
		Serie& operator=(const Serie&);
		double& operator[](int);
 
		int Lunghezza() const;
		void Mult(double);
		void Stampa();
 
};
Questo e' un banale costruttore della classe:
Serie::Serie(int lung)
{
	lunghezza=lung;
	iniz=new double[lung];
	for (int i=0; i<=lung-1; i++) 
		iniz[i]=0;
};
Scrivo una funzione membro che prende un pezzo del vettore iniziale e
lo mette in un vettore piu' piccolo predefinito
// sx e dx sono gli estremi del pezzo da tagliare, pezzo e' la
//destinazione
void Serie::Take(int sx, int dx, Serie& pezzo) 
{
 
 
	if (sx<1 || dx>lunghezza || dx<sx ) 
	{
		cout << "Errore di range nel Take";
		exit (EXIT_FAILURE);
	};
memcpy(pezzo.iniz,iniz+sx-1,(pezzo.Lunghezza())*sizeof(double));
	pezzo.Stampa();
}
Cosi' funziona,s e cerco di farglielo restituire direttamente pero'
// sx e dx sono gli estremi del pezzo da tagliare, pezzo e' la
//destinazione
Serie Serie::Take(int sx, int dx)
{
 
 
	if (sx<1 || dx>lunghezza || dx<sx ) 
	{
		cout << "Errore di range nel Take";
		exit (EXIT_FAILURE);
	};
	this->Stampa();	// qui vedo la serie di partenza integra
	Serie pezzo(dx-sx+1); // creo il vettore destinazione
	this->Stampa();	// la serie di partenza non e' piu' integra ,
			//mi stampa numeri assurdi
 
memcpy(pezzo.iniz,iniz+sx-1,(pezzo.Lunghezza())*sizeof(double));
	pezzo.Stampa();
	return pezzo ;
}
A me sembra un problema di puntatori ma proprio non capisco cosa
succede, perche' la chiamata del costruttore per l'oggetto pezzo va ad
interferire con i contenuti del this, mi sembra assurdo.
Grazie per l'eventuale aiuto,
			Luca

                         Luca
A occhio e croce, se non hai fatto qualche errore nel metodo Stampa()
(classico errore: usare iniz per scorrere il vettore) dovrebbe funzionare
La parte piu' delicata e' pero' l'ultima: devi stare molto attento a come
hai implementato costruttore di copia, distruttore ed eventuale operatore
di assegnamento.
La cosa piu' importante che si impara da questi esempietti a scopo didattico
e' che e' molto meglio usare i std::vector ;-)
-- 
Our little systems have their day;
They have their day and cease to be;
They are but broken lights of thee.
		-- Tennyson
Newsgroup: it.comp.lang.c++
Titolo: Problemi nella realizzazione di un ADT

Qualcuno potrebbe spiegarmi i motivi per cui questo programma non funziona ?
Gli errori segnalati dal compilatore (Borland C++ 3.0) sono i seguenti:
riga 1 Tabella.h:       ) expected
riga 2 Tabella.cpp:   'info' is not member of 'Tabella::riga'
riga 3 Tabella.cpp:   'Tabella::Inserisci(int,Tabella::info)' is not member
of 'Tabella'
I numeri di riga sono indicati vicino alle istruzioni
// File Tabella.h
 #ifndef TABELLA_H
#define TABELLA_H
#include <iostream.h>
#include "bool.h"
class Tabella {
friend void Informazione(int, Tabella);
public:
     Tabella() { inizio = NULL; }
     Tabella(const Tabella& t) { inizio = Copia(t.inizio); }
     Tabella& operator=(const Tabella&);
     ~Tabella() { Rilascia(inizio); }
     void Inserisci(int, info);                        Riga 1
     void Elimina(int);
private:
     struct info {
          char *nome;
          char *cognome;
          char *num_tel;
     };
     struct riga {
          int k;
          info i;
          riga *next;
     };
     riga *inizio;
     bool Appartiene(int, riga*);
     riga* Copia(riga*);
     void Cancella(int, riga*&);
     void Rilascia(riga*&);
};
#endif
// File Tabella.cpp
#include "tabella.h"
bool Tabella::Appartiene(int k, riga* p)
{
    return (p != NULL) && ((p -> k == k) || (Appartiene(k, p -> next)));
}
Tabella::riga* Tabella::Copia(riga* p)
{
     if (p != NULL) {
          riga* q = new riga;
          q -> k = p -> k;
          q -> info = p -> info;                      Riga 2
          q -> next = Copia(p -> next);
          return q;
     } else return NULL;
}
Tabella& Tabella::operator=(const Tabella& t)
{
     if (t.inizio != inizio) {
          riga* temp = inizio;
          inizio = Copia(t.inizio);
          Rilascia(temp);
     }
     return *this;
}
void Tabella::Elimina(int k)
{
     Cancella(k, inizio);
}
void Tabella::Cancella(int k, riga*& p)
{
     if (p != NULL) {
          if (p -> k == k) {
               riga *q = p;
               p = p -> next;
               delete q;
          }
          else Cancella(k, p -> next);
     }
}
void Tabella::Inserisci(int k, info i)           Riga 3
{  
    if (Appartiene(k, inizio)) Elimina(k);
    riga* p = new riga;
    p -> k = k;
    p -> i = i;  
    p -> next = inizio;
    inizio = p;
}
void Tabella::Rilascia(riga*& p)
{
     if (p != NULL) {
          Rilascia(p -> next);
          delete p;
     }
}
void Informazione(int k, Tabella t)
{
     Tabella::riga* p = t.inizio;
     if (t.Appartiene(k, p)) {
          while (p -> k != k) p = p -> next;
          if (p != NULL) {
               cout << "Nome: " << p -> i.nome << endl;
               cout << "Cognome: " << p -> i.cognome << endl;
               cout << "Telefono: " << p -> i.num_tel << endl;
          }
     }
}

 Qualcuno potrebbe spiegarmi i motivi per cui questo programma non funziona
?
Direi che manca la definizione del tipo "info".
Ciao,
Gianfranco
Newsgroup: it.comp.lang.c++
Titolo: Classe per pipe

C'è una classe standard per eseguire comandi esterni e catturarne
l'output?
Ho trovato pfstream e procbuf, ma credo nessuna delle due sia standard.
Qual è la migliore di queste?
-- 
Saluti,
    Mardy
http://castellina.org/interlingua

 l'output?
man popen (POSIX.2 compliant)
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy          loreti at pd dot infn dot it

Newsgroup: it.comp.lang.c++
Titolo: RTTI

non conosco ancora bene questo meccanismo e avrei bisogno di aiuto per
iniziare.
il mio problema è questo:
ho 3 classi derivate da un interfaccia comune che fungono da documento
la classe view,che usa sempre i metodi dell'interfaccia,in una determinata
situazione ha bisogno di sapere quale delle 3 classi è auutalmente il
documento e di salvare l'informazione
lavoro con visualcè msdn non è che sia molto chiaro in merito
avete qualche consiglio da darmi?
ciao e grazie

 ha scritto nel
messaggio news:Ia7z9.9275$Bs5.3...@news1.tin.it...

prima di tutto penso che se tu, ad un certo punto del codice, abbia
necessità di sapere quale tipo di classe implementa l'interfaccia che
stai utilizzando molto probabilmente c'è un errore nel design
dell'applicativo. Questo perchè l'interfaccia ti serve per realizzare
l'astrazione, se ti serve sapere quale classe stai utilizzando allora
sei legato al dettaglio implementativo -> hai perso l'astrazione -> il
tuo codice presto conterrà if e switch a non finire (pessimismo e
fastidio).
Detto questo, per sapere se una classe Base è di tipo Derived partendo
da un puntatore a base puoi fare così:
void foo (Base* ptr)
{
    Derived* derived_ptr = dynamic_cast <Derived*> (ptr);
    if (derived_ptr)
    {
        //    ptr è effettivamente di tipo Derived.
    }
}
oppure, se hai o vuoi usare i reference
void foo (Base& ref)
{
    try
    {
        Derived& derived_ref = dynamic_cast <Derived&> (ref);
        //    qui usi bellamente derived_ref
    }
    catch (std::bad_cast const&)
    {
        //    peccato, ref non era Derived...
    }
}
... però non sono sicurissimo del nome dell'eccezione (std::bad_cast).
Sorry.

 Sorry.
provo subito
grazie,ciao

Non dimenticare che per far funzionare il dynamic_cast, la base deve avere
almeno un metodo virtuale.
Ivan Molella
Newsgroup: it.comp.lang.c++
Titolo: tempo di calcolo

come faccio a sapere il tempo di calocolo del mio proframma c/c++ ??
precisione ms
grazie

 precisione ms
Prova clock(), ma non e` probabile che sia sufficientemente preciso per te.
La *GRANULARITA`* CLOCKS_PER_SEC magari ti pare anche esserlo
sulla carta, ma la PRECISIONE e` spesso inferiore: ad esempio non e`
raro vedere un CLOCKS_PER_SEC di 1000, ma in realta` l'orologio e`
aggiornato solo 18.2 volte al secondo, quindi 55 ms e` la precisione...!
Per scendere sotto la risoluzione permessa da clock(), devi usare modi
che variano da piattaforma a piattaforma, e quindi ti conviene chiedere
sul gruppo dedicato alla piattaforma di tuo specifico interesse (tipo ad
esempio it.comp.programmare.win32) specificando anche il compilatore
che usi (non tutti i compilatori di una data piattaforma hanno, a volte,
accesso alle stesse identiche funzionalita`, oppure usano approcci
non identici per accedervi).
Alex

Newsgroup: it.comp.lang.c++
Titolo: Programmazione batch..dove?

Scusate so che non centra molto con il vostro newsgroup ma dove posso
trovare un manualetto di programmazione batch base...magari in rete?

trovare un manualetto di programmazione batch base...magari in rete?
Dal prompt di MSDOS:
if /?
for /?
I .bat di Dos non offrono molto...
Gianni Rondinini, programmer and designer at Pierre s.n.c.
e-mail: mailto:
pie...@mail.asianet.it
homepage: 
http://www.geocities.com/Eureka/Plaza/7153
Red Hat Linux user since 9/25/97
If a train station is where the train stops, what is a work station?

Newsgroup: it.comp.lang.c++
Titolo: Salvare setup di un prg.

Salve a tutti,
    sto da poco usando Visual C++ 6.0, e vorrei chiedere un modo semplice
per salvare il setup di un programmino realizzato con dialog, e' meglio
salvarlo su file (e come si fa) oppure nel registro di windows?
E-Mail: 
Kae...@tin.it
Ringrazio anticipatamente,
        Luca.

 salvarlo su file (e come si fa) oppure nel registro di windows?
Lo puoi salvare in un file .INI o nel registro di configurazione, in
entrambi i casi esistono delle API che ti permettono leggere/scrivere su
INI/reg.conf.
Le disposizioni date da MS con l'uscita di Win95 prevedono l'abbandono
dei file .INI e l'utilizzo esclusivo del reg.conf. anche se ancora molti
programmi utilizzano i file .INI.
Un file .INI e' comunque piu' facilmente gestibile e si rischiano meno
errori pericolosi.
Ciao.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |

 salvarlo su file (e come si fa) oppure nel registro di windows?
Per preferenza personale preferisco i file separati (INI o altro) al
registry. Se vuoi gestire gli INI utilizza le funzioni API
GetPrivateProfileString()/WritePrivateProfileString() e compagnia.
EMG
Newsgroup: it.comp.lang.c++
Titolo: errori con funzione membro inline

Ciao. ho fatto un progetto costituito dai seguenti tre file:
----------------file
main.c------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "Multiplication.h"
int main()
{
        int f1, f2, prodotto;
        printf("Inserire un valore intero per il primo fattore:\n");
        scanf("%d", &f1);
        printf("Inserire un valore intero per il secondo fattore:
\n");
        scanf("%d", &f2);
        Multiplication obj;
        prodotto = obj.molt(f1, f2);
        printf("Il prodotto tra i due fattori e\' %d\n", prodotto);
    system("pause");
    return 0;
}
-------------------------file Multiplication.cpp-----------------
#include <stdio.h>
#include <stdlib.h>
#include "Multiplication.h"
inline int Multiplication::molt(int a, int b)
{
    int result;
    result = a * b;
    return result;
}
-----------------------------file
Multiplication.h---------------------
class Multiplication
{
public:
int molt(int a, int b);
};
--------primo errore generato da microsoft visual studio
2008:--------------
error LNK2019: riferimento al simbolo esterno "public: int __thiscall
Multiplication::molt(int,int)"
 (?molt@Multiplication@@QAEHHH@Z) non risolto nella funzione _main
-------secondo errore generato da microsoft visual studio
2008:---------
fatal error LNK1120: 1 esterni non risolti
Chi mi aiuta a capire come eliminare gli errori?
Grazie

 Chi mi aiuta a capire come eliminare gli errori? Grazie
Puoi provare ad abolire il file Multiplication.cpp e copiare la 
definizione della tua funzione alla fine del file Multiplication.hpp.
Le funzioni inline hanno collegamento interno (qualcuno mi corregga se 
sbaglio la terminologia) e come tali vanno inserite negli header (.hpp) e 
non in un file .cpp.
Saluti
Newsgroup: it.comp.lang.c++
Titolo: Dove sbaglio?

Sto tentando di costruire una dll con bloodseed dev c++. sono partito con lo 
scheletro di base e ho aggiunto alcune funzioni di prova. quando tento di 
richiamare una delle funzioni da visual basic mi da un errore riconducibile 
al fatto che gli argomenti sembrano essere sbagliati(error 49 convenzione di 
chiamata dll non valida). qualche suggerimento?
questo è il dll.h:
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void HelloWorld (void);
DLLIMPORT double potenza (int);
DLLIMPORT double prodotto (int);
DLLIMPORT double somma (int,int);
#endif /* _DLL_H_ */
e questo è il main
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
DLLIMPORT void HelloWorld ()
{
    MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
DLLIMPORT double potenza(int A){
        double B;
        B=pow(A,2);
        return B;
        }
DLLIMPORT double prodotto(int A)
 {
        double ValoreCalcolato;
        ValoreCalcolato = 2*A
        return ValoreCalcolato;
}
DLLIMPORT double somma(int A,int B)   {
        double x;
        x=A+B;
        return x;
        }
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being 
called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
grazie in anticipo 

Buongiorno,
Il problema potrebbe riguardare la dichiarazione della funzione in VB
(vedi ByVal Keyword in 
http://support.microsoft.com/kb/153586
).
Comunque questo forum non è il più corretto per affrontare il problema
- essendo specifico alla piattaforma Microsoft Windows.
Saluti.
Newsgroup: it.comp.lang.c++
Titolo: Aiuto: casting & ereditarietà

Ho il seguente problema:
una classe A contiene un metodo virtual, chiamiamolo M1 che fa determinate
operazioni;
la classe B č una sottoclasse di A, ed oltre a nuovi metodi, implementa
(supera) il metodo virtual M1;
Avendo un puntatore p ad un oggetto della classe A, chiedo se esiste un modo
per:
1) "convertire" l'oggetto puntato in un oggetto di classe B
2) far puntare p a questo oggetto di classe B
(in modo che p->M1(...)  sia il metodo di B)
Ho provato a scrivere due righe , ma generano errore:
A* p = new A;
*p = (B)(*p);
...
Qualcuno saprebbe aiutarmi ?

 1) "convertire" l'oggetto puntato in un oggetto di classe B
No, non se l'A cui punta p non e` gia` un B sin dall'inizio.  Infatti, non
vi e` in generale un metodo per trasformare un oggetto di una classe
arbitraria in uno di una qualsiasi delle sue sottoclassi.
Se "e` un B gia` dall'inizio"...:
    A*p = new B;
    p = dynamic_cast<B*>(p);
dynamic_cast ti permette di fare la trasformazione in modo *sicuro*
(tornerebbe 0, se p non puntasse effettivamente a B o oggetto di
classe derivata da B).
Se per un tuo qualche caso particolare sai come costruire un B a
partire da un A, dovrai dichiararlo, con un costruttore:
    class B: public A {
    //...
        B(A);    // dichiaro che so come trasformare un A in un B
    //...
    }
e allora per coprire entrambi casi potresti avere:
    B* daAaB(A* p) {
        B* q = dynamic_cast<B*>(p);
        if(q) return q;
        q = new B(*p);
        delete p;
        return q;
    }
Alex
Newsgroup: it.comp.lang.c++
Titolo: Problemi con InitInstance() di MFC...

Il mio problema è il seguente:
ho creato un'applicazione basata su un dialog con MFC. Contiene
diversi controlli e quando viene premuto il pulsante OK vorrei che lo
stato dei controlli venisse salvato su un file. Allora ho inserito il
codice per il salvataggio su file nella porzione di codice indicata da
MFC (v. sotto). Purtroppo quando tento di accedere ai componenti del
dialog (es. dlg.m_radiobutton.GetCheck() ) scatta un'asserzione che mi
sembra indicare che dlg non è più valido. Un esempio di codice è
riportato sotto:
BOOL CConfiguraApp::InitInstance()
{
	// Standard initialization
#ifdef _AFXDLL
	Enable3dControls();	// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC
statically
#endif
	CConfiguraDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
		//MIO CODICE CHE GENERA UN'ASSERZIONE:
		if (dlg.m_radiobutton.GetCheck() ) {   // <- GENERA ASSERZIONE!
		...//CODICE OMESSO
		}
 
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}
	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}
GRAZIE.

...


sembra indicare che dlg non è più valido. Un esempio di codice è
Infatti quando torna la doModal il dialogo non esiste piu`.
Devi fare, nella tua classe derivata da CDialog, override
di OnOK, e in quell'override salvare quel che vuoi prima
di chiamare CDialog::OnOK che terminera` il dialogo.
Alex
Newsgroup: it.comp.lang.c++
Titolo: Domandina Ina Ina

Cosa cambia tra l'operatore delete e l'operatore delete[] ?
Grazie e ciao by Tdx

Cosa cambia tra l'operatore delete e l'operatore delete[] ?
p = new char;        => delete p;
p = new char[100];    => delete [] p;
--
Francesco Trotta
http://space.tin.it/computer/ftrotta
Elimina "x_" dal mio indirizzo per mandarmi
un messaggio direttamente

 Cosa cambia tra l'operatore delete e l'operatore delete[] ?
Dalle FAQ:
[16.11] What if I forget the [] when deleteing array allocated via new
T[n]?
All life comes to a catastrophic end.
It is the programmer's --not the compiler's-- responsibility to get the
connection between new T[n] and delete[] p correct.  If you get it
wrong,
neither a compile-time nor a run-time error message will be generated by
the
compiler.  Heap corruption is a likely result.  Or worse.  Your program
will
probably die.
EMG




 Sbaglio qualcosa io?
Si.  Dalla FAQ list di comp.lang.c++ , consultabile alla pagina
http://www.cerfnet.com/~mpcline/c++-faq-lite/
[16.12] Can I drop the [] when deleteing array of some built-in type (char,
        int, etc)?
No!
Sometimes programmers think that the [] in the delete[] p only exists so the
compiler will call the appropriate destructors for all elements in the array.
Because of this reasoning, they assume that an array of some built-in type such
as char or int can be deleted without the [].  E.g., they assume the following
is valid code:
    void userCode(int n)
    {
      char* p = new char[n];
      // ...
      delete p;     // <-- ERROR! Should be delete[] p !
    }
But the above code is wrong, and it can cause a disaster at runtime.  In
particular, the code that's called for delete p is operator delete(void*), but
the code that's called for delete[] p is operator delete[](void*).  The default
behavior for the latter is to call the former, but users are allowed to replace
the latter with a different behavior (in which case they would normally also
replace the corresponding new code in operator new[](size_t)).  If they
replaced the delete[] code so it wasn't compatible with the delete code, and
you called the wrong one (i.e., if you said delete p rather than delete[] p),
you could end up with a disaster at runtime.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

...
Newsgroup: it.comp.lang.c++
Titolo: "Temporary" passato per riferimento

Ho notato che il compilatore gcc/g++ (GNU Compiler v4.0) di Linux non 
accetta il passaggio per riferimento di un "temporary" (oggetto 
restituito da una funzione), e la cosa non mi sorprende, es:
	void f(tipo& );
 
	tipo g(){
		tipo a;
		//...
		return a;
	}
	f(g()); // ERRORE! g++ interrompe la compilazione
invece il compilatore della Borland (v5.5), pur fornendo un warning 
("Temporary used as parameter...") compila il codice e il programma 
sembra funzionare correttamente.
Qualcuno sa dirmi di più sulla questione?
P.S. Sono uno studente alle prese col c++ in un corso di algoritmi e 
strutture dati, per cui se ho scritto delle inesattezze (fesserie) 
ditemelo, non abbiate pietà! Grazie :)

 
In C++ non è consentito legare (bind) un temporaneo a un reference 
non-const (T&), mentre è possibile legarlo a un reference const (const T&).
Quindi, GCC 4.0 si comporta bene, mentre il Borland 5.5 accetta codice non 
legale.
Per approfondire la questione, cerca, ad esempio:
    "non const reference" temporary c++
con Google. L'argomento è stato discusso più volte anche in questo NG.
Max

 Qualcuno sa dirmi di più sulla questione?
Le due hanno ragione, intanto ch'il linguaggio dimanda solo un
messagio in caso di errore. Ed un warning e anche un messagio.
In fatto, se non si riferisce a una costante, e vietato
utilisare un temporario per initializare un riferimento.
Invecce, non era sempre così; la regola era introdutta circa
1990 solo, e certi compilatori accettano codice come questo
senza neanche un warning. (Troppo, secondo me.)
--
James Kanze                                           GABI Software
Conseils en informatique orientée objet/
                   Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, 
+33 (0)1 30 23 00 34

Newsgroup: it.comp.lang.c++
Titolo: Info...

Cerco info per realizzare un driver (una unita') simile al Guest dello
Iomega Zip, in linguaggio C o C++ (meglio se C++Builder).
...BUONE FESTE
BRUNO
voy...@zuzzurello.com
http://www.zuzzurello.com/elettronica/voyager

Iomega Zip, in linguaggio C o C++ (meglio se C++Builder).
prova a guardare nei sorgenti di linux, c'e` il driver per lo zip.
comunque il C++ Builder te lo scordi, i driver non si scrivono
trascinando componenti per lo schermo.
Buon 1998
[ranger, email: 
ran...@queen.it
]
Newsgroup: it.comp.lang.c++
Titolo: Database Open Source

...qualcuno conosce di librerie Open Source o comunque freeware per la
gestione di semplici database, anche soltanto in formato testuale ??
Grazie per l'attenzione.

gestione di semplici database, anche soltanto in formato testuale ??
Purtroppo qui sei OT.
Luc.

 Tutor at D.S.I. University of Milan
V_/_ 'The future will not remember, the past doesn't forget.'
I'm Linux zion 2.4.0 #11 lun feb 26 15:37:56 CET 2001 i586

Il giorno Tue, 27 Feb 2001 08:13:46 +0100, mentre stavo arricchendo la
Telecom con i miei scatti telefonici, ho letto il messaggio di Luc
<TOGL...@katamail.com-TOGLI> che diceva:

Beh, non credo... se cerca delle librerie per il C++, dove dovrebbe
chiedere?

...qualcuno conosce di librerie Open Source o comunque freeware per la
gestione di semplici database, anche soltanto in formato testuale ??
Grazie per l'attenzione.

 gestione di semplici database, anche soltanto in formato testuale ??
gdbm, della gnu
Newsgroup: it.comp.lang.c++
Titolo: warning su vector

,std::allocator<std::basic_string<char,std::char_traits<char>,std::allo
cator<char> > > >(const std::allocator<std::bas
ic_string<char,std::char_traits<char>,std::allocator<char> > > &)'
capisco che indica informazioni di debug "troncate" a 255 caratteri. Vi
e' mai capitato? in un povero programma di qualche classe mi da 20
warning tutti di questo tipo! mi devo preoccupare?
grazie a tutti!
ciao by Beppe
Sent via Deja.com 
http://www.deja.com/
Before you buy.

warning tutti di questo tipo! mi devo preoccupare?
E' un problema noto del VC++. Una soluzione comune che uso io (e non
solo io) consiste nel mettere nei file header qualcosa come
#pragma warning( disable : 4786 )
Questo problema fra le altre cose la dice lunga su quanto poco
siano stati usati template nel codice microsoft.
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

In effetti il problema che riporti e' _MOLTO_ piu' nocivo di quanto
non potrebbe sembrare a prima vista. Questo innocente warning ti segnala
che e' impossibile usare il debug per leggere il valore delle variabili
con nome piu' lungo di 256 caratteri: ovvero, e' impossibile usare il
debug.
Una volta ho postato una richiesta di aiuto al riguardo senza avere
risposte soddisfacenti (o meglio, le risposte lo erano, solo che
non c'e' soluzione). Se qualcuno sa come far vedere al debug in Visual
C++ 6.0 le variabili col nome piu' lungo di 256 caratteri, lo dica!

Newsgroup: it.comp.lang.c++
Titolo: Libro di testo sul C++

Ho un problema , mi servirebbe un libro di testo sul C++, ne ho già uno "C++
Fondamenti di programmazione, ma è troppo difficile per me, sapreste
indicarmene uno più semplice?
Grazie mille!

 writes:

Quelli indicati nelle FAQ non vanno bene?
http://www.programmazione.it/
 .
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy          loreti at pd dot infn dot it

Newsgroup: it.comp.lang.c++
Titolo: Novello

ad apprendere il C/C++ ???
Posso consigliarti alcuni libri secondo me molto validi:
- Linguaggio C, Kernighan-Ritchie, ed. Jackson
- C++, Schildt, ed. Mc Graw-Hill
- Inside Visual C++, Kruglinsky, ed. Mondadori Informatica (solo per  
   Visual C++)
Bye
Enrico




L'altro giorno ho trovato in libreria un libro che mi pare valido :
Programmare in C++,  Stephen Blaha, Apogeo L.52.000, pag.525
Dalle poche pagine che ho letto mi ha dato la sensazione di essere piuttosto
chiaro
Fra i vari testi che ho sfogliato, e' l'unico che documenta un po' il
funzionamento della libreria STL (18 pagine)
Spiega bene anche la libreria iostream, pero' di questa parlavano anche altri
libri
Saluti da Parma
Newsgroup: it.comp.lang.c++
Titolo: libro

mi sapete consigliare qualche libro che parta dalle basi e soprattutto ben fatto?
ciao
dave

mi sapete consigliare qualche libro che parta dalle basi e soprattutto ben fatto?
Che parta dalle basi del C++? il Lippman
Se noi puoi sempre incominciare con il tutorial di Paolo Marotta che
trovi su 
http://cpp.programmazione.it
----
Lawrence "Rhymes" Oluyede
rhy...@myself.com
"Quando un uomo siede un'ora in compagnia di una bella ragazza,
sembra sia passato un minuto. Ma fatelo sedere su una stufa
per un minuto e gli sembrerà più lungo di qualsiasi ora.
Questa è la relatività".
Albert Einstein

ciao a tutti,volevo un parere sull'unico libro sul c++ che ho trovato
in libreria:C++ Fondamenti di programmazione scritto da Deitel &
Deitel,edito dall'Apogeo.Spero di non aver buttato 70 carte :).Inoltre
volevo sapere la differenza tra visual c++ e visual c++ 6.0
introductory edition che e' nel cd allegato.Quale mi conviene
installare?una copia normale o quello?
ciao e grazie
dave

Newsgroup: it.comp.lang.c++
Titolo: Context switch

Salve a tutti,
    Devo effettuare una context switch su un processore Pentium.Riesco a
salvare i registri, ma non so come salvare i flags e l'istruction
pointer.Nessuno mi puņ passare una routine gią confezionata, o dirmi
dove poter reperire informazioni al riguardo??
Grazie in anticipo(doppio grazie se mi rispondete tramite mail.... ;-) )
        Andrea

 dove poter reperire informazioni al riguardo??
Su 
www.intel.it
 ci sono tutti i manuali dei processori Intel.
P.S.
Sei OT
--
Alessandro Monti

 --
Scusate tutti, non credevo di essere OT, la prossima volta stò più
attento.....
    Andrea
Newsgroup: it.comp.lang.c++
Titolo: Domanda su template, classi e puntatori

a.k.a. "Mi sa che sto facendo il passo piu' lungo della gamba"
Salve a tutti.
Sono uno studente universitario, e sto incominciando a studiare il C++,
avendo qualche base (mooolto poco, in effetti) di c.
il problema e' che mi stavo esercitando con le classi e i template, e sono
incappato in strano problema.
nodo_puntatori.h:
template <class tipoelem>
class Nodo {
  public:
    Nodo();
    ~Nodo();
    tipoelem legginodo();
    void scrivinodo (tipoelem input);
    Nodo * get_succnodo() {          // <-- l' ho dovuto fare qua!
      [...]
    };
    void set_succnodo();
  private:
    tipoelem etichetta;
    Nodo * successivo;
};
---------------
nodo_puntatori.cpp:
#include "nodo_puntatori.h"
template <class tipoelem>
Nodo <tipoelem>::Nodo() {
  [...]
}
template <class tipoelem>
Nodo <tipoelem>::~Nodo() {
  [...]
}
template <class tipoelem>
tipoelem Nodo <tipoelem>::legginodo() {
  [...]
}
template <class tipoelem>
void Nodo <tipoelem>::scrivinodo (tipoelem input) {
  [...]
}
template <class tipoelem>
void Nodo <tipoelem>::set_succnodo() {
  [...]
}
--------------
avrei 2 domande:
1) e' proprio necessario scrivere ogni volta tutta quella pappardella nel
.cpp?
2) non riesco a capire come dovrei scrivere il metodo get_succnodo (nel
cpp, ovviamente), poiche' mi dovrebbe ritornare un puntatore a Nodo, ma
riesco solo ad ottenere errori.
-- 
ZeD
16/01/2004 - S. Marcello-S. Priscilla

 riesco solo ad ottenere errori.
1) Si,credo proprio che sia necessario...
2) Se ci fai vedere come l'hai scritto magari qualcuno ti dice dove sbagli!

 2) Se ci fai vedere come l'hai scritto magari qualcuno ti dice dove sbagli!
Scusa, probabilmente non mi sono spiegato.
Cosi' com' e' non ci sono errori e funziona, ma vorrei lasciare nell'
header solo i prototipi, mentre vorrei mettere nel cpp l' implementazione
dei vari metodi.
Ci sono riuscito con tutti tranne uno, cioe' Nodo * get_succnodo().
Come andrebbe scritto?


 Come andrebbe scritto?
Effettivamente non era chiarissimo dal messaggio precedente :)
Cmq, la notizia triste e': non puoi. Questa purtroppo e' una limitazione 
del C++ attuale - anche se, se non mi sbaglio, in un modo o nell'altro 
ogni compilatore ti permette di farlo, anche se in modo diverso.
Infatti, se guardi ad es. le STL, a questo riguardo ti prendi paura... ;P
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 ha scritto nel messaggio
news:pan.2004.01.16....@libero.it...


 Ci vedremo Martedì o no?
Ue', Ghiro! ;P
martedi'? intendi il 27 per discreta?
(oddio, mi sa che e' un po' ot...)
-- 
ZeD
17/01/2004 - S. Antonio abate

 (oddio, mi sa che e' un po' ot...)
Cavoli, che interessante discussione sul C++...


 >>Ci vedremo Martedě o no?

Newsgroup: it.comp.lang.c++
Titolo: funzioni

Salve a tutto il ng.
Dunque, ho creato un mio personale header con alcune funzioni di vario
genere da eventualmente includere in un mio programma.
In una di queste funzioni si fa eseguire ad un'altra funzione contenuta nello
stesso .h .
Io vorrei che se l'utente dichiara e implementa la stessa funz. nel suo
programma venga eseguita quella che scrive lui, altrimenti venga eseguita
quella contenuta nel .h .
Un po' come fa la parola chiave virtual nelle classi base...
Si può fare ciò?
Spero di essermi spiegato bene...
Grazie in anticipo,
Alex
-- 
-----------	
email: el_co...@TOGLIQUESTOlibero.it
icq: 132581870
-----------

 Spero di essermi spiegato bene...
Non so se ho acpito bene... ma qualcosa del genere ti potrebbe andare bene?
Nel tuo file alex.h metti la funzione di default (ovviamente il prototipo, e
il resto nel file alex.cpp):
typedef void FunctionType (void);
void DefaultFunc() {
  cout << "Default";
}
void CallTheOther(FunctionType TheOther = DefaultFunc){
  TheOther();
}
a questo punto la puoi chiamare nei due modi:
#include "alex.h"
void AnotherFunc() {
  cout << "Another";
}
void rony() {
    CallTheOther(); //chiama la tua funzione
    CallTheOther(AnotherFunc); // chiama quella dell'utente.
}
In realtà non è quello che chiedevi, perché la cosa non è per niente
trasparente al momento della chiamata come nel caso dei metodi virtual.
In alternativa, potresti avere una variabile di tipo FunctionType e farla
settare all'utente una tantum, così da quel punto in poi esegue sempre la
sua funzione, senza doverla passare alla chiamata...
======================================================
Rony Cesana
Sistemi Informativi srl - Gruppo Liberologico
via F. Goya 2 - 56010 loc. Ghezzano - Pisa Italy
tel.: 
+39 050 877088
 - fax: 
+39 050 8755498
pers.: 
+39 347 2582666
e-mail: 
r.ce...@liberologico.com
www.liberologico.com
======================================================

Non è propio quello che volevo ma non importa va benissimo anche come mi
hai consigliato te. Con qualche ritocchino ho infatti risolto il problema
passando il nome della funzione come parametro come hai scritto te.
Grazie mille per l'aiuto,


Newsgroup: it.comp.lang.c++
Titolo: Consiglio libro per Vs C++

Ho studiato l'ANSI C ed ora vorrei imparare il visual C++ perché credo che
con esso č piů facile costruire applicazioni WIN32. Mi potreste consigliare
un buon libro per imparare il visual C++?
E' piů utile imparare qualche altro linguaggio per scrivere applicazioni
per acquisire dati  manipolarli e restituirli tramite finestre di dialogo?
GRAZIE!

Prova guida al Visual C++ della Mc Graw Hill, io lo sto imparando con quello
e mi trovo bene.

Newsgroup: it.comp.lang.c++
Titolo: bcb, jpg e gif

Salve a tutti!
Sapete indicarmi qualche componente, dll, libreria, sorgente...
QUALSIASI COSA che mi permetta di gestire con il mio BCB 5 immagini
gif e jpg (in particolare devo farne un banale resize) e che  funzioni
bene? 
Grazie, Giuseppe

 wrote in message
3a0c86a7...@news.tiscalinet.it...

Newsgroup: it.comp.lang.c++
Titolo: Funzioni MFC

Sto modificando un codice per ottenere una serie di funzioni che siano
indipendenti dalle librerie MFC.
Vorrei rimuovere da un programma in visual c++ 5.0, distribuito su più
moduli, tutte le chiamate MFC per utilizzare la modalita di compilazione not
using MFC. Esiste un programma che determina quali funzioni contenute nel
sorgente appartengono ad MFC oppure una lista di tutte le funzioni MFC.
Ho gia eliminato tutte le funzioni afx* e la parte del programma che
implementava l'interfaccia grafica.
Devo eliminare pure le variabili di tipo CString?
Compilando senza MFC ottengo:
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol
__endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol
__beginthreadex
Debug/windsurf.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Se rimuovo tutte le funzioni MFC questi errori spariscono?
Mentre in una serie di librerie esterne sono passato dalla modalità MFC a
quella senza MFC in maniera indolore.
                                    Grazie Marco

                                    Grazie Marco
Prego, Luc.

Newsgroup: it.comp.lang.c++
Titolo: DLL - Punto di ingresso

Ciao,
 ho greato una DLL con C++.net contenente solo metodi .
Tentando di utilizzare tali metodi pero' il risultato e' il seg. messaggio 
d'errore:
"Impossibile trovare un punto di ingresso con nome InstallSecurity
nella DLL InstallSecurity.dll."
Cosa sto sbagliando??
Cosa e' il punto di ingresso?
Grazie dell'aiuto.
Ciao
Ale

 Cosa e' il punto di ingresso?
Il punto di ingresso sarebbe l'indirizzo che permette di identificare 
l'inizio della funzione in oggetto.
Il tuo problema è di sicuro la decorazione dei nomi che effettua il 
compilatore C++ (usa un blocco extern "C"), o se non è quello, allora
è il tipo di chiamata da usare e relativi alias (__stdcall o __cdecl).
Se usi un programma come Depends, puoi vedere come i nomi delle funzioni
vengono codificati (in genere: _NomeFunzione@Param)

 č il tipo di chiamata da usare e relativi alias (__stdcall o __cdecl).


 Ciao
Figurati!
Ho sputato sangue per creare le mie DLL, senza avere aiuti risolutivi, 
quindi è un piacere aiutare, ovviamente se gentile.
Newsgroup: it.comp.lang.c++
Titolo: interrupt per campionamento

Il mio problema è un po' delicato: vorrei sapere come è possibile realizzare
un campionamento da una scheda qualsiasi (che so audio o porta seriale) con
intervalli di tempo il più accurati possibile al fine di gestire in tempo
reale una applicazione di controllo.
Vedo di spiegarmi più chiaramente: dovrei realizzare un programma che legge
da una scheda (non importa quale) ad intervalli regolari e tra un intervallo
e l'altro deve svolgere dei dati su quello che ha trovato...troppo
complicato?!?
Ogni aiuto o incoraggiamento è gradito a piene mani!!
grazie

Paolo Roberto Grassi ha scritto:

Ti dò una risposta un po'...inutile: dovresti generare un interrupt e 
ogni volta che avviene conti l'evento e ti comporti di conseguenza.
Con le piccole CPU è facilissimo (microcontrollori), con una CPU tipo 
intel o amd...un'altra cosa!!! Secondo me a baso livello dovrebbe 
esistere qualche ticks su cui sincronizzarsi.
Proprio un post filosofico,abbastanza inutile.
Ciao

Le fasi dello sviluppo, IMHO, sono due:
- device driver
- applicazione in user-space
il device driver dovrà avere la gestione dell'hardware, IRQ,
lettura/scrittura dati ad/verso hardware e bufferizzazione(se necessario).
Il resto del lavoro se lo smazza l'applicazione in user-space.
Nel caso tu debba gestire periferiche tipo RS232 o parallela, forse è meglio
tenersi il driver del SO e sfruttare le risorse che ti vengono fornite, poi
valuta tu.
Se hai bisogno di real-time non appoggiarti troppo sul PC, i moderni SO non
puntano tanto su questo aspetto, salvo che non scelga un SO adatto (tipo
QNX) o non applichi delle patch particolari (RTOS o altro)
In linea di massima, se decidi di scrivere un driver, le operazioni sono,
oltre al settaggio dell'handler per l'IRQ:
- acknowledge dell'IRQ(se lavori con 1 PCI è indispensabile, altrimenti l'SO
passa la richiesta ad 1 altro driver essendo l'IRQ condivisi)
- segnalazione alla scheda del ricezione dell'IRQ (attento a questa fase,
rischi di avere un treno di IRQ che ti blocca l'SO)
- lettura dati
- bufferizzazione
Il buffer verrà poi letto dall'applicazione in user-space. E' buona norma
tenere il meno possibile nel driver e demandare tutto il lavoro ad
applicazoni in user-space
Bye,
Raktzo
Bye,
Raktzo


Io invece ti scoraggio: la tua richiesta e' OT in questo newsgroup. Non
c'e' accenno al C++ e riguarda aspetti totalmente dipendenti dalla
piattaforma specifica.
Ciao,
Nicola