Newsgroup: it.comp.programmare.win32
Titolo: Codice sorgente delle API

forse mi prenderete per pazzo ma... come si fà ad ottenere il codice
sorgente delle API ?
perchè tutto questo... creo applicazioni in .Net (C# o Vb.Net) bene, posso
usare buona parte del framework su linux usando Mono, ma , mi ritrovo a fare
chiamate P/Invoke, e come faccio su linux ? linux (per quanto ne so io) non
ha le stesse api Win32 !
Ciao,
--
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site (
http://www.tekkentag.altervista.org/
 )
Co-Webmaster di SceptilePage (
http://www.sceptilepage.altervista.org/
 )
Account Messenger: 
thetot...@msn.com

 ha le stesse api Win32 !
... non riesco piů a seguire i tuoi post.
Semplicemente non si puň... quando c'č la necessitŕ di fare il porting 
di un'applicazione da un sistema operativo ad un altro la prima cosa che 
si deve fare č quella di evitare i legami con gli strati sottostanti..
ad esempio.. vuoi far presente al tuo utente che si č verificato un 
errore con una bella messagebox? non richiamare mai l'api di windows, ma 
usa ciň che il framework ti mette a disposizione.. e solo quando esso č 
insufficiente allora creati un wrapper attorno a queste primitive del 
sistema..
ora passando alla tua richiesta.. non si puň ottenere il sorgente delle 
api, proprio xchč rientriamo nel circolo vizioso del tuo precedente 
post.. su come ottenere il listato con un decompilatore.. al limite puoi 
ottenere un listato assembly.. ma che te ne fai quando poi 
l'architettura del sistema operativo č molto vasta e ci sono passaggi 
non documentati?
antonio

Emh... scusate, forse faccio richieste assurde ... :-(
mi studierò di + il framework.
in particolare le APi che mi interessavano erano quelle WriteINI(),
ReadINI(), e quelle per ottenere la posizione del cursore sullo schermo; c'è
qualcosa sul Framework per queste funzioni?


 qualcosa sul Framework per queste funzioni?
Posizione del cursore sullo schermo? Se non sbaglio c'è una proprietà 
Cursor o qualcosa del genere nel framework con tanto di coordinate X/Y 
del mouse rispetto alla form... per quanto riguarda invece i file INI 
forse c'è qualcosa.. o se non c'è qualcosa (dovrebbe adottare l'xml) al 
limite ti basta un'attimo una ricerca su internet e troverai qualche 
documento.. fare una classe che legge scrive file INI è relativamente 
abbastanza semplice, apri il file.. quando l'utente ti chiede di leggere 
un parametro in un blocco trovi il blocco (leggi di sequenza tutte le 
righe.. fino a che non trovi il blocco dentro le []), dopodichè prima di 
incontrare un altro [blocco] devi trovare una riga che inizia con la tua 
stringa (case insensitive però), e restituisci tutto quello che sta a 
destra di = ... non è nulla di trascendentale!
problema è la scrittura.. al file di testo puoi fare l'append, ma non 
puoi fare una insert in una posizione specifica.. quindi lo dovresti 
caricare in memoria e poi da lì fare l'overwrite.
saluti
antonio

 antonio
Mmm... bene per il fatto del cursore...
Ma, per l'INI??? sicuramente nn è una buona idea usare un For... troppo
tempo; la classe per gli INI è molto complessa e si basa su file Random ...
Qualche consiglio per librerie ecc???
Inoltre mi hai detto dell' XML, io le potenzialità di questo linguaggio non
ne conosco proprio... a cosa serve?
Ciao,


 ne conosco proprio... a cosa serve?
extended markup language.. a cosa serve sinceramente non l'ho capito 
nemmeno io.. anche perchè in tutti gli ambienti di lavoro puntualmente 
lo scartano a favore di file di testo.. diciamo che potenzialmente serve 
a scambiare informazioni tra sistemi eterogenei... E' un formato 
abbastanza aperto .. ma ancora non si sta affermando in tutti i settori..
nel mio ambiente di lavoro mi piacerebbe di gran lunga avere un sistema 
che utilizzi XML con schemi predefiniti per poter ricevere e trasmettere 
DDT, FATTURE, PREVENTIVI, ORDINI... insomma qualcosa di veramente 
concreto.. però preferiscono come ho detto prima semplici file di testo..
ma vadano a ........
buona serata

 buona serata

 Anzi, alcuni ci sviluppano (vedi XMLSpy ) dico, come si fa???
quando lo scopro te lo dico
antonio

 quando lo scopro te lo dico
ok, grazie ;-)


 Sta per accesso casuale...
se vuoi un file ad "accesso casuale" e hai carta bianca inventati un
formato adeguato: ad esempio puoi memorizzare nel file un albero binario
di ricerca in cui i puntatori ai figli sono in realtà offset nel file.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Personalmente non ho mai usato open for random ma ho sempre usato le api
writeINI e readINI... in che senso albero binario?


 writeINI e readINI... in che senso albero binario?
come in che senso un albero binario? un albero binario, punto e basta. un
grafo in cui ogni "palla" ha due archi che si dirigono verso altre due
"palle" ^_^' che si chiamano "figlio destro" e "figlio sinistro". una cosa
del genere:
typedef struct _NODE {
    // custom fields...
    struct _NODE *pLeft, *pRight;
} NODE, *PNODE, *BTREE;


 del genere:
azz.. indi quei cerchi sul libro di algoritmo che rappresentavano i nodi 
del grafo prendono il nome di palla?
quindi il codice va riscritto cosě..
struct palla {
	struct palla	*sinistra;
	tipo	valore;
	struct palla	*destra;
};
... ma ho l'impressione che lasci a fraintendimenti il grafo cosě...
saluti
antonio

 .... ma ho l'impressione che lasci a fraintendimenti il grafo così...
battuta sagace... -_-'


Non credo che mi serva...


 Non credo che mi serva...
come no? se devi cercare rapidamente qualcosa senza dover scandire intere
aree di memoria gli alberi binari di ricerca sono la soluzione migliore
assieme alle hash tables, solo che queste ultime imho non sono indicate
per un file.
un albero binario è quello che ti ho descritto; un albero binario di
ricerca è un albero binario in cui per ogni nodo il sottoalbero sinistro
contiene tutti nodi minori, quello destro tutti maggiori; il metodo di
comparazione tra due nodi lo scegli tu, e la comparazione in genere è in
senso stretto (non ci sono elementi duplicati in un albero binario di
ricerca).
per esempio, metti di dover memorizzare un dizionario, quindi un insieme
di stringhe, e supponi di avere la necessità di dover cercare una stringa
ogni tanto, solo che il dizionario è *mooolto* vasto; che fai? se metti le
stringhe in un array e lo scandisci di sana pianta da cima a fondo (o da
fondo a cima, come preferisci), nel caso peggiore ci impieghi troppo
tempo; se fai una ricerca in un albero binario i cui nodi sono ordinati
alfabeticamente finisci molto prima, non c'è paragone (prova e vedrai ;) ).


 binario? come faccio ad aggiornarlo?
per metterlo su un file basta che al posto dei puntatori usi degli offset
dall'inizio del file, quindi la struct che rappresenta un nodo diventa
cosě:
typedef struct _FNODE {
    // custom fields...
    DWORD dwLeft, dwRight;
} FNODE, *PFNODE, *FBTREE;
// "FNODE" sta per "file node" :PPP
in pratica per memorizzare la posizione che i figli destro e sinistro
hanno all'interno del file, uso dei DWORD. per aggiungere un nuovo nodo
basta che lo scrivi alla fine del file e colleghi opportunamente l'offset
"dwLeft" o "dwRight" del nodo padre. per rimuovere un nodo sono cavoli :D
normalmente quando rimuovi un nodo da un albero binario uno dei figli
viene agganciato direttamente al nuovo padre al posto del suo ex padre,
mentre l'altro deve essere reinserito con tutto il sottoalbero; in un file
puoi fare la stessa cosa, ma il problema sono gli spazi vuoti che si
vengono a creare con la rimozione dei nodi: devi trovare un modo per
tenerne traccia e utilizzarli per i nuovi nodi.


dimenticavo: considera anche l'ipotesi di usare un file mapping ;)
ciao


.. in che senso degli offset?
cioè dico, mica posso scrivere il codice di un struct in un file?
puoi farmi un esempio di scrittura in un file?


 puoi farmi un esempio di scrittura in un file?
[CODE]
FNODE n;
.
.
.
DWORD dwDummy;
WriteFile(hFile, (LPCVOID)&n, sizeof(FNODE), dwDummy, NULL);
[/CODE]
NB: naturalmente in entrambi gli esempi che ho fatto qui ho usato il tipo
"FNODE" che ho definito qualche post fa :)


Grazie, ci proverň e ti farň sapere ;-)
