Newsgroup: it.comp.lang.visual-basic
Titolo: Come fare una DLL ? + ex

Ciao, ho provato a fare una dll stupidissima, ma non va neppure
questa, volevo provare a fare una DLL, ma non saprei da dove
iniziare...
nella classe per la dll ho messo questo:
	Public Sub federico(kikko As String)
	kikkino = kikko + " olle"
	End Sub
e la ho compilata e messa come "c:\progetto1.dll"
in un modulo questo:
	Public Declare Sub federico Lib "c:\progetto1.dll" (ByVal
kikko As String)
e il progetto la richiama cosi':
	Private Sub Command1_Click()
	Call federico("prova")
	MsgBox kikkino
	End Sub
In teoria nella msgbox dovrebbe venire fuori "prova olle"
mentre in pratica non funziona un tubo...
Ciao, Fede
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 -----------Federico Emanuele Galli----------
 ----------Visual Basic's Programmer---------
 
 Sideralis Programs (Visual-Basic and Delphi)
 
http://www.geocities.com/colosseum/loge/2151
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
                 Trust no ONE.
Per rispondermi via E-Mail togli STOPSPAMMERS.
Guarda la RFD per it.comp.prog.collaborazione !

 End Sub
E ti aspetti pure che funzioni?
se kikkino č (come ho osato sperare) pubblica nella tua dll, allora ti ci
puoi riferire cosě:
progetto1.kikkino
includendo la dll nei reference del tuo progetto. Tuttavia se includi tale
dll nei reference, che te ne fai della funzione dichiarata all'inizio? la
potresti infatti invocare cosě:
progetto1.federico "prova"
E' molto piů probabile che tu volessi semplicemente quanto segue:
nella dll:
 Public function federico(kikko As String) as string
     federico = kikko + " olle"
 End Sub
nel progetto:
Public Declare Function federico Lib "c:\progetto1.dll" (ByVal kikko As
String) as string
Private Sub Command1_Click()
     MsgBox federico("prova")
End Sub


Ciao
    Il problema e che tu non stai creando una dll "normale" ma una dll activex
poichè in vb si possono creare solo quelle.
Quindi non devi usare nessun enunciato declare... ma devi solo dichiarare una
classe pubblica nel progetto della dll(così facendo fai un server activex)
Poi per il lato client devi creare un collegamento tramite la finestra
reference e dichiarare una variabile così:
dim localobject as new classeobj.
Spero di esserti stato di aiuto
ciao dany
--
Posted from 
dns.iqsnet.it
 [192.106.88.9]
via Mailgate.ORG Server - 
http://www.mailgate.org

End Sub
Tuttavia, anche con questo codice mi da l'errore che riscontravo col
mio codice. Infatti VB mi dice che e' impossibile trovare un punto di
accesingresso della DLL federico in "c:\progetto1.dll"
Ma che e' questa DLL, un forziere ? :)
Quale puo' essere la causa di questo errore ?
Ciao !
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 -----------Federico Emanuele Galli----------
 ----------Visual Basic's Programmer---------
 
 Sideralis Programs (Visual-Basic and Delphi)
 
http://www.geocities.com/colosseum/loge/2151
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
                 Trust no ONE.
Vota per per it.binari.visual-basic !

dim localobject as new classeobj.
Ma localobject e classeobj sono variabili che si riferiscono a che ?
Grazie,


Dunque, per dichiarare la classe come pubblica ?
Se quando hai creato il progetto hai scelto "DLL ActiveX" dovrebbe averti
già creato la classe di default pubblica; in ogni caso vai nella finestra
delle proprietà della classe e cambia la proprietà instancing (vedi help per
i vari significati).
A questo punto inserisci la tua sub nella classe (diciamo che si chiama
"Classe1" e che il tuo progetto Dll si chiami "Progetto1"):
         Public Sub federico(kikko As String)
         kikkino = kikko + " olle"
         End Sub
e compila.
Apri il progetto client, dovresti trovare la tua dll nella finestra dei
riferimenti, selezionala.
In una qualunque routine del client inserisci queste istruzioni.
Dim MiaClasse as Classe1 'oppure as Progetto1.Classe1
Set MiaClasse = new Classe1 'oppure new Progetto1.Classe1
MiaClasse.federico("prova")
e dovrebbe funzionare; se ora vuoi vedere il contenuto della variabile
(proprietà) kikkino devi assicurarti che, nella Dll, sia stata definita come
pubblica all'interno di Classe1 oppure che , sempre in Classe1, ci siano le
routine Property adatte per farti restituire il valore.
Ciao.
Luca Dormio
l...@ifminfomaster.com
ldo...@tin.it

 Grazie,
Allora mi spiego meglio...- SERVER -Crei un progetto (di tipo dll activeX
nome=progettodll)
Inserisci un modulo di classe PUBBLICO (per esempio la dll contiene una classe
pubblica di nome miaclasse)
Compili il progetto e cos' hai il server activex (la dll)
(non creare la dll direttamente se no devi anche registrarla con regsrv32, devi
solo mandare in
esecuzione il progetto)
- CLIENT -
Apri una nuova istanza dell'IDE di VB
crei un progetto exe (normale)
apri l'object browser
clicchi col destro e seleziona references
sulla lista ci sarà di sicuro il nome del progetto della tua dll (progettodll)
selezionala
nell'object browser verranno visualizzati gli oggetti contenuti in progettodll
bene ora nel codice verranno riconosciute le classi contenute in progettodll e
quindi
potrai dichiarare una variabile in questo modo:
dim myobj as new miaclasse
ed accedere ai metodi della classe come al solito.
Spero di essere stato di aiuto ciao Dany


Allora, seguedo un po' i consigli di tutto ora la cosa marcia. In
pratica pero' non ho capito bene 2 cosette....
1) com'e' che non la posso usare come una DLL normale....
2) Come fa il mio progetto a riconoscere la dll... Riconosceva il
progetto avviato in istanza parallela, ma una volta creata la dll e
avviato il progetto da solo, riconosceva ancora tutto... mi pare
strano, come fa ? mi serve saperlo xche' se non capisco all 100% come
funziona avro' sempre dei problemi...
Insomma... se la dll non viene dichiarata nei riferimenti del progetto
non marcia, ma io non so dove andra' a finire la dll una volta
installata e dunque il mio programma non puo' capire a priori dive sta
la dll
[ Ma se io dunque ho una DLL che ho gia' creato *.dll e la voglio
utilizzare in un progetto, come faccio a dire al mio programma
diusarla se non posso usare delcare ? ]
E dunque rimango un po' spiazzato su questo fatto....
Scusate lo stress !
Ciao !



Le risposte ai tuoi quesiti sono:
Devi usare regsrv32 per registrare le tue dll/acx (activex). Tale programma
provvede ad inserire le voci nel registro di configurazione.
I tuoi applicativi una volta registrati i server, possono accedere a tali
librerie collegandole dalla finestra di dialogo REFERENCES (che legge il
registro di configurazione controlla tutti i server activex esistenti).
Una volta che li inserisci nel progetto e quindi compili e crei il prg. di
setup, quest'ultimo provvede automaticamente a registrare i server activex sul
computer su cui andrai ad installarlo.
Le DLL normali (non active x) NON possono essere create da visual basic ma
puoi crearle in Delphi o in visual C (ma il programma di setup non le gestisce
e devi tu indicare dove posizionarle).
Spero di aver risposta ai tuoi questiti.
Ciao Dany



Se non erro (almeno con gli OCX funziona cosi'), se la DLL (ActiveX) e'
nella stessa directory dell'EXE, dovrebbe venire registrata automaticamente
al primo lancio dell'EXE.
Naturalmente poi non e' buona cosa cancellare la DLL (es. quando
dis-installi l'applicazione), ma dovresti PRIMA de-registrare la DLL
ActiveX.
(Il ragionamento e' identico a quello degli OCX).
--
Roal Zanazzi
z...@iol.it