PDA

View Full Version : [Excel] Usare in VBA una dll creata in VB6


cipi
26-02-2009, 14:27
Ciao,
come da oggetto sto provando a creare una dll da usare in VBA all'interno di Excel. Sono passato a VB6 (che non conosco bene) dopo aver provato in VB.NET e VC++.NET perché la dll deve essere COM (ActiveX). Non capisco però come creare una dll leggibile da VBA visto che mi da sempre problemi di "punto di ingresso" o di inizializzazione della dll.
Qualcuno sa fornirmi una procedura step by step?
Grazie 1000!

MarcoGG
26-02-2009, 17:49
Beh, vediamo prima di ridurre a zero gli errori sulla DLL... ;)

Creare DLL in VB6 è abbastanza semplice.
Anzitutto devi aprire un nuovo progetto, del tipo "DLL ActiveX".
Verrà creata una classe di default...

Subito dopo vai su proprietà ed imposta alcune cose importanti :
Devi rinominare quanto prima ( prima di salvare ) il progetto con un nome più significativo di "Progetto1".
Inoltre inserisci una descrizione "intelligente" in "Descrizione Progetto", perchè in molti casi sarà l'unica voce che troverai negli elenchi vari dei Riferimenti utilizzabili, quando la dovrai importare !

A questo punto puoi tenere la prima ( ed unica ) classe nei "Moduli Di Classe" della DLL, eliminarla e/o aggiungerne altre.

Immagino tu sappia già tutto o quasi su Property Let / Property Get, Functions o Subs ( i futuri metodi della DLL... ). ;)

cipi
26-02-2009, 17:53
diciamo che in seguito a queste tue domande vado a leggere qualcosa in più (santo google!)... non voglio farti perdere tempo per cose che posso trovare in internet... ti ringrazio invece delle "dritte"... quelle talvolta fanno la differenza.

vai con la parte due della spiegazione ;)

MarcoGG
27-02-2009, 08:15
vai con la parte due della spiegazione ;)


Ok, poniamo tu abbia adesso la tua bella DLL "NomeDll.Dll" compilata correttamente e funzionante, che ha 1 classe "ClasseDll", la quale espone ad es. un metodo ".MetodoDll".
Inoltre nella "Descrizione Progetto" avevi specificato ad es. "La Mia Prima DLL v1.0".

Apri un nuovo WorkBook Excel, vai nell'editor VBA ( le pagine con il codice... ), poi Strumenti/Riferimenti. Nella lista dei tanti Rif disponibili dovrebbe già esserci "La Mia Prima DLL v1.0". Se non ci fosse puoi sempre cercare manualmente la DLL con Sfoglia...
Una volta aggiunto il Rif al WorkBook, il codice essenziale per utilizzare la DLL è il seguente :

Dim nomeIstanza As nomeDll.ClasseDll
Set nomeIstanza = New nomeDll.ClasseDll
nomeIstanza.MetodoDll()

;)

cipi
10-03-2009, 21:47
Chiedo scusa se rispondo solo ora ma ero incasinato fino a ieri...
Ho provato a fare come dici tu; la dll contiene un solo "Modulo di classe" con all'interno una funzione unica e semplice:
Public Function Somma(ByRef x As Double, ByRef y As Double) As Double
Somma = x + y
End Function
Poi sul file excel ho aggiunto la dll (la vede) che si trova nella stessa directory del file excel. Nell'excel il modulo è come segue:
Option Explicit
Public Declare Function Somma Lib "mF_colors.dll" (ByRef x As Double, ByRef y As Double) As Double

Sub Prova()
Dim v(10) As Double
v(1) = 0.3
v(2) = 0.5
v(3) = Somma(v(1), v(2))
End Sub

Ma a questo punto mi da un errore: "Impossibile trovare il punto di ingresso Somma della DLL in mF_colors.dll"
Cosa significa?

MarcoGG
11-03-2009, 09:18
Public Function Somma(ByRef x As Double, ByRef y As Double) As Double
Somma = x + y
End Function

Option Explicit
Public Declare Function Somma Lib "mF_colors.dll" (ByRef x As Double, ByRef y As Double) As Double

Sub Prova()
Dim v(10) As Double
v(1) = 0.3
v(2) = 0.5
v(3) = Somma(v(1), v(2))
End Sub



Ma quello non è il metodo che ho suggerito io.
Il metodo sicuro è importare il Rif della Dll, come spiegato sopra, e richiamarne metodi e proprietà così :
Dim nomeIstanza As nomeDll.ClasseDll
Set nomeIstanza = New nomeDll.ClasseDll
nomeIstanza.MetodoDll()

Poi non mi è chiaro perchè passi 2 valori numerici Double ByRef. :mbe:
Usa ByVal.

cipi
11-03-2009, 10:35
Miiiiiiiii............. Non ci posso credere!!!! Funziona! Grazie.
Ok, ma non è finita: questo era solo "Hello World"! Quindi tornerò a "rompere" se mi perderò nei meandri della programmazione.
Ancora grazie,
cipi