Newsgroup: it.comp.lang.delphi
Titolo: Richiamare una dll scritta in c++

 Attenzione a non confondervi.
[snip codice]
Forse ho capito male, ma su dici che C non possiede il passaggio per
riferimento, ma poi fai un esempio con questo tipo di passaggio ... ho
capito male?
--
- Carlo -
c.b...@libero.it

Carissimi,
sto cercando, da Delphi, di accedere a delle funzioni contenute in una dll
scritta in C++. Riesco a richiamare le funzioni ma ho qualche problema,
ovviamente, con la conversione dei parametri.
Il tipo char* C++ corrisponde al tipo PChar Delphi. E fin qui tutto OK.
Il tipo int C++ sembrerebbe corrispondere al tipo Integer Delphi ma da'
problemi e sono costretto a xor-are i risultati che mi ritorna la DLL con
65536.
Due questioni aperte:
La struct di C++ corrisponde forse al record pascal ?
I passaggi per riferimento (quelli con l'&) di C++ equivalgono ad i passaggi
per variabile di pascal (var) ?
Grazie mille.
Nicola.
-- 
Posted from 
gandalf.crmpa.it
 [151.4.23.2] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 per variabile di pascal (var) ?
mmm ... qui mi cogli impreparato ... andando per ricordi (ne parlai tempo
addietro con un programmatore C) ti posso dire che il loro passaggio
standard dovrebbe essere l'opposto del nostro ... noi passiamo parametri per
valore (se non utilizziamo il var), quindi il loro corrispondente dovrebbe
essere per indirizzo. Ora quello con l'& dovrebbe corrispondere al nostro
passaggio per valore, ovvero viene effettuata una copia della variabile e
non si hanno modifiche sulla stessa al termine della procedura.
Sperando di non aver fatto confusione con Java ti saluto! :)
Ciao!


passaggio per valore, 
Attenzione a non confondervi.
In C il passaggio per copia e' compiuto con la semplice :
void func( int x )
{
}
int main()
{
    func( 2 ) ; /* passaggio per copia */
}
Se si vuole implementare il passaggio per riferimento, bisogna usare
un puntatore :
void func( int *x )
{
     *x = 3 ; /* modifico il valore puntato */
}
int main()
{
    int i ;
    func( &i ) ;
}
In C++, invece, il passaggio per riferimento e' supportato e viene,
appunto, implementato con i "reference" :
void func( int& x ) 
{
     x = 3 ; /* modifico il valore passato */
}
int main()
{
    int i ;
    func( i ) ; 
}
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

capito male?
Leggi meglio, hai capito male.
Il C NON possiede passaggio per riferimento ma SOLO per copia (ovvero
per valore).  In C il passaggio per riferimento viene SIMULATO con i
puntatori.  Il C++ (che e' un'altra cosa rispetto al C) possiede
invece il passaggio per riferimento.
L'esempio sul passaggio per riferimento e' C++ , non C.


 puntatori.
OK, allora avevo capito "abbastanza" bene ... in realtà devi fare
"esplicitamente" quello che in altri linguaggi viene fatto implicitamente
... trattasi sempre di un "passaggio per riferimento" ...


compare nulla di tutto quello da te riportato.
Si', e' di scarsa qualita', fidati di chi conosce il C e il C++ e li
utilizza quotidianamente.
Voglio sperare che la documentazione che possiedi non sia ne' "Tricky
C" ne' un qualsiasi testo di Herbert Schildt, perche' altrimenti di
errori ne troverai parecchi.
Quello da me riportato e' anche riscontrabile in altre fonti di
documentazione ufficiale e non, come lo standard del linguaggio e
l'ANSI Rationale, il Kernighan & Ritchie II edizione e le FAQ di
comp.lang.c.


 comp.lang.c.
Se ti può interessare ecco la documentazione:
http://www.manuali.net/tutorial/c-lang.zip
la pagina interessata dovrebbe essere Intro2.


la pagina interessata dovrebbe essere Intro2.
No grazie,
ho gia' letto i testi "sacri".
