Newsgroup: it.comp.lang.visual-basic
Titolo: VB.NET - Creare DLL

Buonasera a tutti . (PROVO a CHIEDERE)
Sto facendo un programma di AstroCalcolo .
Devo calcolare il valore di una serie di lunghi dati (Teoria VSOP87) .
Quindi per evitare, ho pensato che mettere i dati in una libreria esterna, che ho chiamato 
"Earthvsop87_lbr.dll"
Dal programma vendono calcolati i dati ---------
E " t2kJDEMIL "
 
Quindi inserendo in intestazione  nel programma ho inserito
Imports Earthvsop87_lbr
-------------------------------------------------------
Mentre nella DLL
-------------------------------------------------------
Public Class Earthvsop87
    Public Function EarthL00(ByVal t2kJDEMIL As Double)
Dim L0 As Double
        L0 += 1.75347045673
        L0 += 0.03341656453 * Math.Cos(4.66925680415 + 6283.0758499914 * t2kJDEMIL)
        L0 += 0.00034894275 * Math.Cos(4.62610242189 + 12566.1516999828 * t2kJDEMIL)
....ecc..........
EarthL00 = (L0 * 100000000)
Return EarthL00
 
----------------------------------------
Quindi nel programma devo andare a prendere il valore calcolato
Ma non riesco a capire cosa mettere ... mi sono bloccato nel ragionamento
Cioe' Dal programma il valore " t2kJDEMIL "  e' calcolato !
Richiedo il risultato di Return EarthL00 (ideale 14 cifre dopo virgola , come si fa ?) 
Pensavo a String.Format("{0:f14}", EarthL00) MA COME ?
 
La libreria chiamata calcola il valore e come lo richiamo nella textbox ??????????????????
Non capisco come prende il valore "t2kJDEMIL" la libreria.
Nel programma. ..................
" Dim Add As New Earthvsop87 "
??
??
txtEarthL00.Text = Add.EarthL00
 
Su EarthL00 , appare righetta rossa. Dicendo che l'argomento non e' stato specificato per 
il parametro "t2kJDEMIL"
 
Suggerimenti o aiuti da chi lo fa per lavoro e passione
GRAZIE
 

 specificato per il parametro "t2kJDEMIL" 
 
Hai definito una funzione che ha bisogno di un parametro IN INPUT, un numero a virgola mobile, quindi glielo devi passare ogni volta che la chiami
 
Dim temp As Double = Add.EarthL00(<il tuo numero di partenza>)
txtEarthL00.Text = temp.ToString("F14")
 
Nota che, casomai avessi impostato da un'altra parte il valore in una variabile che si chiama "t2kJDEMIL", ovvero come il parametro, è del tutto ininfluente, viene ignorata; per come ha definito l'intestazione della tua funzione, lo devi sempre passare esplicitamente
 
 
A quel punto, che tutto questo sia dentro o fuori la tua DLL esterna, non cambia nulla, il funzionamento è lo stesso.

il funzionamento è lo stesso.
 
Sarebbe che se potessi avere i dati esterni, alleggerisco il programma
Sono cose che in internet sono specificate, ma male si adeguano al diverso problema anche 
se il passo e' simile .
Il mio ideale sarebbe poter avere su librerie esterne i valori di 38000 righe di codice 
esterne, oltre la tranquillita' di ridurre errori e carico memoria !!!!!!!
Hai alternative e' sopratutto un esempio che possa paragonare meglio ?
Dopotutto, e' una sommatoria "E" , calcolo il valore T > t2kJDEMIL , lo devo passare alla 
dll, che calcola il valore finale per passarlo al programma che lo visualizza in una 
textbox.
Facile a dirsi ma vedo difficile a farsi .
 
Cordiale Luca.
(Luciano)
 
 

mobile, quindi glielo devi passare ogni volta che la chiami
Luca D:
...................
 
Allora mi ci sono messo e ho guardato l'esempio a questo link (mi scuso per il link 
completo e visibile)
https://www.dreamincode.net/forums/topic/121314-creating-a-dll-and-using-it-in-your-application/
 
A questo punto ho variato i valori e fatto delle prove .
Nella programmazione Libreria . passi .
Io ho Microsoft Visual Studio Enterprise 2017 v.15.7.5 -- + Framw.4.7.03062 .----------
 
1) Nuovo Progetto  "WINDOWS DESKTOP" ==> Libreria di Classi(.NET FRAMEWORK)
2) Scegliere un nome decente e che rispecchi i canoni !
3) .Net Framework3.5 (ho scelto) so che i windows hanno le 2.0 installate di default, 
facendo una ricerca su MSN .
4) Salva e si apre il progetto Es."" PDUNZDLL""  <=========== ATTENZIONE A QUESTO NOME !
5) Viene scritto questo Codice ""PUBLIC CLASS CLASS1 "" al posto di Class1, ci mettete la 
vostra .. Io lo chiamata MyFunctions
    e alla fine END CLASS
6) Scriverete tra questi codici la Funzione . => Public Function EarthL00(ByVal t2kJD As 
Double)
Attenzione non potevo mettere t2kJDEMIL, perche' nel programma gia' presente ! quindi la 
richiamo cambiando il nome.
 
7) Definire le variabili "Dim Result As Double ", nel mio caso
Result += 1.75347045673
        Result += 0.03341656453 * Math.Cos(4.66925680415 + 6283.0758499914 * t2kJD)
ecc...ecc... qui ho circa 1000 linee di sommatoria .!
 
8) Alla fine [RICORDATE il Result nel Dim assegnandogli la variabile ?.. Bene ]
 
Result = String.Format("{0:f15}", (Result * 100000000))
Return Result
 
    End Function
End Class
-----------------------------Compilo la DLL MENU' >>> Compilazione > "COMPILA SOLUZIONE" -
Vengono generati 3 file.
nel path => c:\Users\gobv\Documents\Visual Studio 
2017\Projects\PDUNZDLL\PDUNZDLL\bin\Debug
PDUNZDLL.dll
PDUNZDLL.pdb
PDUNZDLL.xml
Ed il class nella dir : \Projects\PDUNZDLL\PDUNZDLL : Class1.vb , che era da rinominare 
"MyFunctions" ma va bene uguale-
 
9) Prendete i 3 file e li mettete nel vostro programma
Nel mio caso
c:\Users\gobv\Documents\Visual Studio 2017\Projects\AstroCalcolo\AstroCalcolo\bin\Debug\
Dove c'e' il vostro programma eseguibile e altri file.
 
10) Aprite MS.VS e il vostro progetto
11) All'inizio del linguaggio di codice avete gli Imports.
Aggiungete => "Imports PDUNZDLL "
 
12) Andate nel vostro codice dove verra' richiesta la libreria.
Nel mio caso che e' l'esempio.
Avevo gia' un pulsante di calcolo Chiamato "CALCOLA" = [ btnCalcola ], dove assieme ho una 
marea di calcoli che vengono eseguiti, parliamo di un programma di Astronomia, calcoliamo 
i vari JD, le trasformazioni del giorno in decimale e via dicendo, fino alla posizione 
Sole, Luna e altri pianeti .
 
Quando calcolo, devo calcolare tutto assieme non i varie fasi e, se sopargo linee di 
codice, affanculo la memoria, la scalabilita',, .. il tempo di esecuzione, io ho un I7 a 
3.9ghz,16gb ram, ,a su un procio I3 ? DAI NON PRENDIAMOCI PER IL CULO .
Comunque
""""
Public Sub btnCalcola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
Handles btnCalcola.Click
"""""
Qui calcola TUTTO.
 
Poi a una zona molto in avanti di codice........ ritornando alla libreria che mi serve.
 
ECCO LA PARTE DA METTERE NEL PROGRAMMA
------------------------------------------------------------
Dim Calcola As New PDUNZDLL.MyFunctions
        Dim t2kJD As Double = Val(txtt2kJDEMIL.Text)
        txtResult.Text = (Calcola.EarthL00(CDbl(txtt2kJDEMIL.Text)).ToString)
 
Calcola = e' uguale al nome della Sub Pulsante.
New PDUNZDLL = e' il nome della libreria salvata i famosi 3 file che avete assieme al 
programma.
il Suffisso > " .MyFunctions " che e' il nome all'inizio della Dll Ricordate "Public Class 
MyFunctions"
OK
 
13) La variabile creata t2kJD, che richiama la vera non menzionabile, perche' gia' 
dichiarata, e il cui nome e' nella libreria se notate.
Result += 0.03341656453 * Math.Cos(4.66925680415 + 6283.0758499914 * t2kJD)  <============
 
14) txtResult , perche' e menzionato come nome da associare a quello reale, ma il punto e' 
"(Calcola.EarthL00 ....
Perché menzionato nella variabile associata e che richiama la libreria .
15) txtt2kJDEMIL.Text , nome dato alla Textbox a cui devo ritornare il valore calcolato 
dalla libreria, e riportato in auge al programma!
 
16) Avevo creato un pulsante apposito e una textbox1, che ho eliminato perche' ho capito 
provando come richiedere i valori e come reinserirli, guardando l'esempio in link sopra.
 
ATTENZIONE.. RINGRAZIO A QUANTI RISPONDO E CHE QUI SU QUESTO NEWSGROUP RISPONDO SERIAMENTE 
........
A PARTE MOLTI CHE FORSE NON COMPRENDONO COMPLETAMENTE IL PROBLEMA CHE SI VORREBBE UNA 
SOLUZIONE  "RAPIDA "
ED ALTRI INVECE CERCANO DI DARTI UNA MANO REALE.
 
MA MI ACCORDO CHE QUI SI SIA UNA GRANDE MOLE DI GENTE STITICA NEL DARE CONSIGLI O DARE 
ESEMPI.
VI VOGLIO RICORDARE CHE SI' AVETE STUDIATO, MA NON SIETE I GESU' CRISTO DELLA 
PROGRAMMAZIONE, SIETE STRESSATI E SPESSO VI GIRA IL CAZZO, SAPENDO CHE DARE DEI CONSIGLI A 
VOLTE, VI SCAZZA PERCHE' VOI CI PERDETE TEMPO E ROTTURE DI CAZZO .
E NON VOLTE CHE GLI ALTRI TROVINO SUBITO LA RISPOSTA O LA SOLUZIONE, QUESTO E' ESSERE 
MERDE ! MA VE LO DICO CON IL CUORE.
A 58 ANNI DI GENTE NE HO AIUTATA TANTA, MA DI MERDE NON MI FINISCO MAI DI STUPIRE DI 
QUANTE CE NE SIANO !
 
MA AIUTARSI NON E' UN PECCATO SPESSO QUANDO POI VOI AVETE PROBLEMI, RICORDATE CHE GLI 
ALTRI FARANNO ALTRETTANTO !
 
SPERO DI AVERE ESAURITO IL POST E DATO UNA MANO IO A CHI INVECE NE AVRA' BISOGNO
REALE E NON DA STITICO !!!!!!!!!
 
E 15 GIORNI CHE MI ERO ROTTO IL CAZZO A CERCARE UNA SOLUZIONE E SPERARE QUALCUNO CAPISCA 
COSA MI SERVE .
QUI I PASSI CHE OCCORRONO E SPERO PER GLI ALTRI !
NEL FRATTEMPO TESTO, TESTO E SPERO DARE AIUTI ANCHE AGLI ALTRI .
 
Grazie "Luca D"
Al momento sembra funzionare mo' devo capire di cambiare dei nomi !
E un po' di merda la devo mangiare anche io . no ?
 
 
 
 
 

 
Dimenticavo che nella Libreria Dll poi compilata
inizialmente e' 
Public Function EarthL00(ByVal t2kJD As Double)
       Dim Result As Double
       Result += 1.75347045673
 
 
Ricordando il messaggio precedente mancante.
 
"""
Result += 1.75347045673
        Result += 0.03341656453 * Math.Cos(4.66925680415 + 6283.0758499914 * t2kJD)
ecc...ecc... qui ho circa 1000 linee di sommatoria .!
 
Result = String.Format("{0:f15}", (Result * 100000000))
Return Result
 
    End Function
End Class
""""""""""""
 
 
e che EarthL00 e' menzionata quando si richiama da programma
"""
txtResult.Text = (Calcola.EarthL00(CDbl(txtt2kJDEMIL.Text)).ToString)
""
CORDIALI A TUTTI

 txtResult.Text = (Calcola.EarthL00(CDbl(txtt2kJDEMIL.Text)).ToString) 
 
Vedi sopra... prendi una stringa da un textbox, la converti in double, poi chiami la funzione che vuole un double in input ma invece che dargli la variabile appena convertita, la ri-traformi di nuovo dal textbox (bonus artistico per aver usato Val e CDbl nello spazio di due righe per fare la stessa cosa, scegline una) e dulcis in fundo applichi .ToString al risultato che quindi (per come hai applicato Format() al punto prima) in totale viene convertito Double->String->Double->String
 
Ecc... ecc... insomma, quando dicevo di lasciare un attimo da parte il discorso DLL esterna, e' perchè mi pare ci sia parecchia confusione gia' nelle basi (vedi anche la "soluzione" a colpi di 28 IF dell'altro post), e non mi pareva il caso di aggiungere un altro livello di casino.
 
Che nessuno nasce imparato e' vero, pero' prima di permetterti di mandare a fanculo a destra e a manca chi non ti risponde, magari considera che è già una impresa capire le domande che fai, e che probabilmente il tempo che hai speso per farci la morale lo impiegheresti meglio a leggere un libro introduttivo, e intendo proprio *introduttivo*, al linguaggio

aggiungere un altro livello di casino.
Avro' anche confusione, e se compari l'altro post mi sono dovuto arrangiare ! E comunque a 
modo mio .
 
 
Lascia stare i linguaggi sui NG, spesso ci sono solo troll quando chiedi qualcosa ti 
mandano anche affangulo. O ti pijano per culo .
Che il gruppo sia diventato stitico, non sono solo io a dirlo, basta che guardi in giro o 
leggi in qualche forum in internet e di quanti si lamentano che postando sui NG sono stati 
presi per il culo . E anche i post in altri NG, quindi non veniamo a fare le paternali a 
me' .
Invece che aiutarsi .
Come vedi ........... ora che ti ho risposto mi sa' che forse ............ vuoi vedere che 
sei il padre eterno della programmazione ?
I consigli li accetto la presa per il culo no' mi dispiace.
Se ho fatto una critica basta che ti guardi i post precedenti che, alla fine per un gruppo 
come questo sono poche anche le risposte e di poco valore complessivo, e non sono di 
grande valore programmazione.
 
Vedo che non sei neppure capace a salutare, forse sei abituato con i troll di altri 
gruppi.
Evito di salutarti visto che io lo fatto prima, ma ora no', almeno ti sentirai di essere a 
casa tua e tra i trollazzi e gli stitici .
 

 Infatti
 
Infatti sei un cretino: arrogante, ignorante e ingrato.

 Evito di salutarti visto che io lo fatto prima, ma ora no', almeno ti sentirai > di essere a casa tua e tra i trollazzi e gli stitici .
 
Hai mandato tutti in culo dopo che hai avuto una risposta ragionevole, dovevo pure salutarti?! ci sei o ci fai?