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

Ciao a tutti..
Devo creare una DLL es. Prova.dll ed al suo interno devo
definire una funzione "DimmiCiao" che devo riuscire a richiamare da un exe
in VB.
Come posso fare ?

 Come posso fare ?
crei il progetto
crei la classe
crei la funzione pubblica
compili ed hai la dll
nell'exe
istanzi la classe
chiami la funzione della classe
KillerBoy



Io, al tuo posto, mi comprerei un libro e cercherei di studiarlo.
-- 
ciao, hal

 ha scritto nel messaggio
news:Mi9Nb.250409$vO5.10...@twister1.libero.it...


 Se andassi più nello specifico mi aiuteresti molto
a questo punto non posso far altro che suggerirti di seguire il suggerimento
di hal1961

 ha scritto nel messaggio
news:wx9Nb.256175$e6.10...@twister2.libero.it...


Can't find DLL Entry point Funzione in test.dll
Ah, ma tu vorresti fare una dll tradizionale!
No, con visual basic produci solo dll activeX.
Vedi che ti serve il libro? ;-)
-- 
ciao, hal


Tempo fa in alcune riviste veniva regalato il compilatore C++ Builder 3.0
della Borland, se riesci a trovarlo puoi facilmente creare delle DLL
tradizionali.
es..
------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
    return 1;
}
//--------------- Prova -------------------------
extern "C" char* FAR PASCAL __export prova(char *x)
{
    ShowMessage("Ciao");
    return ("Stringa in ingresso * "+AnsiString(x)+"*  Ciao").c_str();
}
-------------------------------------------------------
Ciao Giorgio

 
Perché secondo te che differenza c'č tra una tradizionale fatta in C o 
C++ e una in VB 5 o 6 chiamate dll activeX ?
ciao Max

 chiami la funzione della classe
presupponi che lo sappia fare
Dunque ti crei un progetto ActiveX e dentro ci metti
Public function Messaggio() as string
    Messaggio = "Ciao"
end Function
La salvi e la compili.
Nel progetto exe:
Dim obj as object
Set obj = CreateObject("nomedll.nomeclasse") 'Richiami la dll
msgbox obj.Messaggio
set obj = nothing
Non l'ho provato direttamente ma dovrebbe funzionare.
Ciao.

C++ e una in VB 5 o 6 chiamate dll activeX ?
Secondo te?
-- 
ciao, hal


Non è buona educazione rigirare le domande, comunque secondo me l'unica 
differenza è che le seconde hanno bisogno del VBrun per funzionare.
Per il resto il loro uso in VB è praticamente identico.
Allora adesso sentiamo la tua, di opinione ;-)

Allora adesso sentiamo la tua, di opinione ;-)
Premetto che quanto segue non e' una mia opinione, ma quanto si puo'
facilmente desumere dalla documentazione: la farina, insommma, e' di
un sacco che non e' mio ;-)
Le dll activex sono oggetti COM che vanno interrogate accedendo alle
specifiche interfacce.
Per fare questo in VB va impostato il riferimento alla dll fra le
proprieta' del progetto e il runtime automaticamente si recupera il
CLSID dell'oggetto, il puntatore a IUnknown::QueryInterface, col quale
poi si recupera l'interfaccia IDispatch e tramite quest'ultima
recupera i riferimenti alle proprieta' ed ai metodi degli oggetti
della dll che vengono istanziati.
Con la dll trazionale VB ti mette a disposizione l'istruzione Declare,
che ti sgrava dalle altrimenti necessarie chiamate a LoadLibrary() e
GetProcAddress() per ottenere il puntatore alla funzione desiderata.
-- 
ciao, hal

 GetProcAddress() per ottenere il puntatore alla funzione desiderata.
Aggiungo:
...e ti aggrava dagli altrimenti non necessari salti mortali per capire
quali decorazioni il compilatore C si č divertito ad aggiungere ai nomi
delle funzioni :)
termoPilucco.

si è divertito ad aggiungere ai nomi delle funzioni :)
LOL :-D
-- 
ciao, hal

 Mi metti un dubbio: anche il compilatore C o solo quello C++?
A logica solo quello C++ perchè il problema deriva dall'overload dei
parametri che, potenzialmente, potrebbe generare due funzioni con lo stesso
nome (ma con parametri di tipi differenti), da cui la ben nota necessità di
"decorare" i nomi.
Poi magari non è così... uso poco il C++ e non ho compilatori C puri.
termoPilucco

 
Buon recupero di una discreta descrizione tecnica, avrei preferito 
leggere la "tua opinione".
Il concetto del mio post è che spesso ci si fa deviare da termini e 
asserzioni "imponenti" ma poi nella realtà dell'uso, che venga chiamata 
attraverso un declare o attraverso il CLSID (certo che anche questo è 
una bella invenzione ... :-( ), quello che volevo dire volgarmente è 
che, il piatto con pane e brodo, sia che lo chiami zuppa o pan bagnato 
sempre lo stesso è ;-)
ciao Max

sempre lo stesso è ;-)
Dal "punto di vista" di visual basic, poiche' questo e' un newsgroup
su visual basic, c'e' differenza ed ho brevemente descritto quale sia
e perche'.
-- 
ciao, hal