Newsgroup: it.comp.lang.visual-basic
Titolo: Interazione con DLL

Ciao a tutti.
So come creare una DLL e come usarla.
Non so come fare per richiamare, dalla DLL, una funzione contenuta
nell'applicazione che usa la DLL.
Cioè, durante l'esecuzione della DLL vorrei richiamare una determinata
funzione contenuta nell'applicazione che ha richiamato la DLL.
Spero di essermi spiegato bene.
Mi aiutate per favore?
Il Pioniere

 nell'applicazione che usa la DLL.
mamma mia, che brutta cosa :-(
sicuro di non poter risolvere in altro modo?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 Sergio
d'accordo con Sergio. Non č un'operazione teoricamente corretta...
Una dll č una libreria di funzioni di cui le applicazioni si servono.
Non sono molto sicuro che si possa fare.
ciao
p.s. qual'č il problema? cosa devi fare?
Brunix


 Brunix
Praticamente la DLL mi visualizza una lista di anagrafiche articoli e vorrei
che quando l'utente fa doppio click su un prodotto questo venisse inserito
immediatamente nel corpo della fattura.
Ma se voi mi dite che non si può fare, allora vorrà dire che nella lista
degli articoli metterò una checkbox accanto ad ogni prodotto e se l'utente
desidera l'inserimento lo marca, e poi quando mi clicca su chiudi, ritorno
la lista dei codici dei prodotti da inserire.
Quest'ultima soluzione è fattibile ma pensavo che fosse molto più semplice
per l'utente fare doppio click.
Comunque grazie lo stesso per il suggerimento di cambiare "strategia".
Ciao.
Luciano

 Brunix
mmm .... e se la DLL deve operare non in modo sincrono ma 
asincrono, ritornare subito ma continuare a lavorare in 
background, e notificare poi la tua applicazione chiamante di 
avere finito (o al limite di richiedere ulteriori dati) ?
Ovvio che la notifica della DLL non avrà alcuna idea di dove 
sarà il flusso di esecuzione, e quindi bisogna pure fornirgli un 
gancio, un entrypoint da chiamare per recapitare il messaggio. 
Tipicamente l'indirizzo di una funzione che risincronizza i due 
thread di lavoro, interno ed esterno,
Per l'iniziatore del thread ... cerca sulla guida il concetto di 
"CallBack". Non è certo un argomento soft e la tendenza a 
bloccare tutto è elevata e si debugga da fare schifo (io per 
primo candidamente ho fatto una sola callback che fungeva e non 
svolgeva nessun altro compito che far funzionare il meccanismo 
callback stesso, giusto per esempio), ma questo non significa 
che lo strumento non serva mai se uno lo sa usare. Anzi, dove ci 
vuole, sarebbe difficilissimo fare senza.
ciao
CCCP++Mario


 avere finito (o al limite di richiedere ulteriori dati) ?
implementare il raiseevent?
-- 
Salutoni
Sergio


Praticamente devi fare i seguenti passi:
Nella DLL devi avere una classe che viene istanziata dall'applicazione.
Questa classe fa la raise di un evento e nella tua applicazione, dove avrai
definito la variabile per l'istanza della classe nella DLL withevents,
catturi l'evento.
Naturalmente per fare questo o la variabile č all'interno di un form o č
all'interno di una classe
-- 
Roberto Ukmar
Indis S.p.A.

 ha scritto nel messaggio
news:n0PJc.53589$GQ3.1...@twister2.libero.it...

VB mette a disposizione l'istruzione Implements, che permette l' uso di
interfacce standard.
Implementa una interfaccia in questo modo (esemplificativo, le funzioni devi
implementarle con i parametri che ti servono effettivamente) :
- Nella tua DLL crei una classe di interfaccia che ti serve per comunicare
con il programma chiamante  es.   iCall con la funzione e i  parametri che
ti interessano SENZA codice, Es:
      Public Sub CallResponse(Byref Param1 as Variant, Byref Response as
Boolean)
          ' E' necessario inserire il commento per il compilatore che
altrimenti bypassa la routine !
      End Sub
- Sempre nella DLL crei una property di connessione pubblica con una
variabile oggetto privata
            Private m_Connect as iCall
            Public Property Set Connect(CallingProg as iCall)
                set m_Connect = CallingProg
            end Property
- Nel programma chiamante, nel form o nella classe in cui ti serve :
Implements iCall
A questo punto ti compare nell' editor del codice la voce iCall e nelle
rouitine la voce CallResponse quindi :
Private Sub iCall_CallResponse (Param1 as Variant, Response as Boolean)
   ' qui chiami la tua routine, i parametri da passare alla dll li assegni a
Param1 e Response
end Sub
Nella Tua DLL, nel punto in cui ritieni opportuno chiamare la routine nel
programma chiamante
    m_Connect.CallResponse( Param1, Response)
    if response = True then
       Debug,Print Param1
   endif
In questo modo chiami la routine nel programma chiamante in modo sincrono,
quindi nella DLL il codice aspetta l' esecuzione della routine nel programma
chiamante, al ritorno puoi controllare i parametri di ritorno ed effettuare
le azioni necessarie.
Ricordati di elimirnare i riferimenti agli oggetti quando scarichi la DLL
Spero di essere stato chiaro (vista l' ora !) e soprattutto di aiuto.
Saluti
Giachi

 ha scritto nel messaggio
news:xmjKc.16290$5D1.6...@news4.tin.it...

Grazie molte per la tua dettagliata risposta.
Ciao
Luciano

 Indis S.p.A.
Grazie tante anche a te Roberto, la tua soluzione è quella che mi piace di
più per la sua semplicità di implementazione.
Ciao
Luciano