Newsgroup: it.comp.lang.visual-basic
Titolo: Usare DLL in VB

Come faccio ad usare una DLL in VB?
Ho provato cosě:
Public Declare Function CreateDataFile Lib _
    "L:\Dll\AcDFSvr.dll" _
    (AcDFName As String, DataName As String) As Boolean
Ma quando chiamo la funzione nel main mi ritorna un errore:
"Impossibile trovare il punto di ingresso della DLL CreateDataFile in
L:\Dll\AcDFSvr.dll "
Come lo definisco sto entry point??
Help me, please?
Grazie.
p.s. la dll mi č stata passata e non ce l'ho gia compilata.

 p.s. la dll mi è stata passata e non ce l'ho gia compilata.
he?
Ciao 

 p.s. la dll mi è stata passata e non ce l'ho gia compilata.
Se parli della DLL di qualche post sopra, se è usata da programmi di scripting,
dubito fortemente che tu possa richiamarne le funzioni come API, ma dovrai
esplorarne le interfacce COM (con il metodo che suggerivo).
Altrimenti, uno strumento per cercare di individuare eventuali funzioni (API)
esportate è il Dependency Walker
C:\Programmi\Microsoft Visual Studio\Common\Tools\DEPENDS.EXE
Apri con questo programma la DLL e dovresti vedere la lista degli exports (ma
non il loro prototipo, però).
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

il codice scritto nella dll deve essre scritto in modo tale da far capire 
alla dll stessa quali funzioni sono interne e quali esterne!
il comando è come per il c++!
extern  nome funzione! 

 ha scritto nel messaggio news:0TX4h.37447

Ok, è il caso che io cambi il mio nick: qui iniziano ad esserci troppi Fabio 
;)
Mi traduci la tua risposta anche in relazione a quella di Rafunk?
Ciao 

gli script vb non posso fare rifermento a una dll come se fosse un api
ovvero
declare function Nome lib "dll" (...) as long
ma gli script usano variabili di tipo oggetto (nel nostro caso dll)
crei la dll cone le funzioni
ogni dll avra il suo modulo di classe(o anche +) facciamo finta ne abbia 2 
class1 e class2
nello script farai
dim DLL1, DLL2
set dll1=createobject("miadll.class1")
set dll2=createobject("miadll.class2")
in questo modo la var DLL1 userà le funzioni scritte nel modulo CLASS1
e la var DLL2 usera quelle nel CLASS2
ovviamente usare lo stesso codice anche in VB 

Grazie 1K per l'aiuto!
Ho utilizzato DEPENDS.EXE ed ha funzionato:
in alcune DLL ho trovato delle funzioni di colloquio con gli strumenti, 
purtroppo di basso livello...molto basso
in altre DLL non ho trovato funzioni ma altre DLL?!? inoltre molte DLL erano 
UGUALI nel senso che contenevano altre DLL. Come è possibile tutto ciò? Sono 
io che non ci capisco una mazza (evento certo) o c'è qualcosa che non va?
Inoltre....approfittando della disponivbilità e della competenza.....non ho 
trovato ciò che mi aspettavo, ossia, le funzioni che in il SW di controllo 
mette a disposizione con VBScript non sono definite da nessuna parte. 
Secondo voi cosa significa? Sono oggetti di più alto livello inclusi in 
altri componenti del SW e non nelle DLL? Come fareste voi ad usarle? Cioè se 
le posso usare lanciando uno script solo dall'ambiente è pensabile che ste 
funzioni siano richiamabili da in SW esterno?
Forse ho fatto troppe domande....ma accetto anche risposte parziali! :-)
Grazie mille,
Pietro
"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:ej1g65$j66$1...@alix.livenet.it...


 siano richiamabili da in SW esterno?
Bisogna che quantomeno posti un esempio di script: da quel codice (in
particolare le istruzioni CreateObject) si può capire dove andare a guardare.
Ciao

Avevo intuito che erano link ad altre DLL di sistema, ma perchè molti file 
erano tutti uguali: gli stessi link e nessuna funzione definita?
Forse altri componenti che le differenziavano non erano visibili con il 
viewer oppure io non so vederlo.
Di sotto due script di esempio eseguibile utilizzando il SW di controllo, 
non ne ho trovati purtroppo con CreateObject:
----------------------------------------------------------------------
Dim RFData ‘ do not dimension as array: RFData()
Result = clsDirectAcq.CreateDataFile(“MyAcDF”, _
“NewDataFile”)
Result = clsDirectAcq.PositionTo(AxisNum, Destination)
RFData = clsDirectAcq.MeasureRFVar()
For iFreq = 1 To clsDirectAcq.nFreqs
For iChan = 1 To clsDirectAcq.nBins
I = RFData(0, iFreq - 1, iChan - 1, 0)
Q = RFData(0, iFreq - 1, iChan - 1, 1)
AmpdB = 10*Log10(I*I + Q*Q)
Phase = Atn2D(Q, I)
‘ Place desired processing here
Next
Next
Result = clsDirectAcq.CloseDataFile()
---------------------------------------
2do esempio
-------------
Result = ClsDirectAcq.CreateDataFile(“MyAcDF”, _
“NewDataFile”)
' Define the order of the scans. Each value is a
' scan number. In this example we assume that MyAcDF
' specifies 7 scans.
ScanList = Array (5, 2, 7, 1, 4, 3, 6)
' Initialize and configure the instruments according
' to the AcDF.
Result = ClsDirectAcq.ConfigureInstruments
For iStep = lbound(ScanList) to ubound(ScanList)
Result = ClsDirectAcq.DoOneScan(ScanList(iStep), False)
Next iStep
Result = clsDirectAcq.CloseDataFile()
-------------------------------
Spero vadano bene.
Ciao
"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:ej26r1$o65$1...@alix.livenet.it...


 controllo, non ne ho trovati purtroppo con CreateObject:
Aspetta... non mi dirai quindi che gli script sono "interpretati" da un
opportuno programma e non sono file VBS standalone, vero?
In tal caso non è facile né scontato che sia possibile interfacciarsi
direttamente a queste DLL.
In pratica non trovi le createobject perché ad es. l'oggetto clsDirectAcq che
viene usato negli esempi che hai postato è definito internamente
all'"interprete".
L'unica è aprire le DLL con OLEVIEW (che si trova sempre nella cartella dove c'è
DEPENDS) e vedere se vi sono classi/interfacce COM... e non è detto, a questo
punto.
Può anche essere che le classi/interfacce che ti servono siano definite nell'EXE
principale del software che utilizza gli script: anche in questo caso,
un'occhiatina all'EXE con OLEVIEW non guasta.
Bye
Raf
P.S.
Nelle risposte quota SOTTO il testo originale, non sopra.