Jump to content
PLC Forum


Sign in to follow this  
Zinzo87

Integrazione dll C++ in VBnet

Recommended Posts

Zinzo87

Buongiorno a tutti,

 

vorrei chiedervi un aiuto su questo problema che mi si è presentato. Premetto che sono un softwerista di automazione aziendale (PLC, HMI) e sporadicamente per hobby mi diletto con altre piattaforme.

 

Per fare un piacere ad un amico mi ritrovo a dover sviluppare un interfaccia grafica in VBnet e uno scanner 3D. Lo scanner ha già una sua interfaccia ma c'è la possibilità tramite comunicazione TCP/IP di interfacciarsi con altri dispositivi o interfacce.

Il fornitore dello scanner mi ha detto che esistevano già delle librerie da richiamare nel mio programma e il tutto avrebbe funzionato senza problemi.

 

Ad ora nei file che mi sono stati dati ho solamente dei file .h e quando vado nel mio progetto VBnet e cerco di aggiungere i riferimenti non ci riesco.

 

Se manca qualche dettaglio chiedete pure.

 

Grazie mille

Share this post


Link to post
Share on other sites

Adelino Rossi

forse se ricordo bene, i file .h sono librerie del linguaggio C.

Share this post


Link to post
Share on other sites
lucios

Ma il fornitore dello scanner non ti ha fornito anche uno o più file .DLL?

In alternativa serve una descrizione del protocollo TCP-IP utilizzato, ma in questo caso la cosa si fa più complessa.

I .h sono solo degli header file che puoi utilizzare in un progetto in C o C++

Share this post


Link to post
Share on other sites
walterword

in VB  non puoi includere direttamente file header. Per le dll c'e' una procedura in import , una specie di wrapping 

Share this post


Link to post
Share on other sites
Zinzo87

Grazie a tutti per le risposte.

Si il fornitore mi ha detto che mi fornirebbe la .DLL in seguito all'acquisto di una licenza. 

Volendo io potrei iniziare a creare i collegamenti nella mia interfaccia o sarebbe più veloce e comodo avere già la DLL per inserirla nei riferimenti??

 

Grazie.

 

 

Share this post


Link to post
Share on other sites
walterword

dll= dynamic link library o libreria a collegamento dinamico 

E' una libreria di funzioni per winzoz utilizzata da programmi eseguibili . _Una libreria statica viene inclusa nel programma durante il processo di  compilazione, collegamento e produzione dell'eseguibile. Dinamica invece viene usata a runtime , modificabile e/o sostituibile a runtime .

Se implementi un pattern puoi lavorare senza la dll che implementerai quando l'avrai a disposizione .Ma con il VB.NET non lo so , io uso solo C# in NET , che e' il inguaggio principe del framework etc etc .Non mi e' mai piaciuto VB 

Share this post


Link to post
Share on other sites
lucios

In Vb si fanno esattamente le stesse cose che si fanno in C#.

Ma, ritornando al problema, che documentazione ti ha fornito esattamente il fornitore a parte gli header? Hai una descrizione del protocollo utilizzato dallo scanner?

Share this post


Link to post
Share on other sites
walterword

non è proprio cosi , poi dipende da cosa intendi per le stesse cose 

Share this post


Link to post
Share on other sites
lucios

Non sono un esperto così raffinato da conoscere tutti i dettagli però, a quanto mi risulta, non ci sono particolari limiti tra i due linguaggi tali da obbligare la scelta di uno o dell'altro se non le preferenze personali.

Il C# è in genere più compatto nella sintassi e, derivando dal C (linguaggio decisamente pulito ed essenziale), è preferito da chi arriva dal mondo C/C++.

Il VB.NET è in genere più friendly nell'apprendimento ed è più descrittivo nella sintassi, anche se più prolisso ed è preferito da chi arriva da VB.

Il risultato prestazionale è praticamente uguale (o almeno non percepibile nel 99,99% delle applicazioni) poichè l'IL prodotto mi dicono sia molto simile ma, ripeto, non sono così esperto.

Ritornando al topic comunque c'è da dire anche che bisogna vedere se il produttore dello scanner fornisce DLL net compliant, cioè fatte espressamente per essere usate in ambiente .NET o no, nel qual caso non si possono includere direttamente ma occorre importarle.

Se però, come dicevo, il produttore fornisse documentazione dettagliata su come eseguire le richieste TCP, forse si potrebbe pensare a costruire una classe apposita o addirittura autocostruirsi la DLL in ambiente .NET

Share this post


Link to post
Share on other sites
walterword

quello che dici e' tutto giusto .Il framework rende entrambe i linguaggi simili da un punto di vista funzionale.

Pero' Parte del framework è C# built e non VB.Net built .

E' chiaro che fino a limiti molto ampi le due cose si equivalgono ma ad altri livelli no .

Senza considerare che VB è interpretato fin dalla nascita del basic .In VB non c'e' bisogno di fare casting come in C ma il costo è sicuramente superiore .

Poi per fare un programma che stampa e registra bolle o molte altre cose ok sono "uguali" 

Share this post


Link to post
Share on other sites
stilnovo

Purtroppo VB non ha speranze. Sarà sempre considerato un linguaggio inferiore, perché il suo precedessore effettivamente lo era. Oggi avrebbe pari dignità del C#, almeno negli intenti dei progettisti, ma tanti continueranno ad avere le loro opinioni "storiche". Che utilità ha dire che "VB è interpretato dalla nascita" ? Oggi mica è così, ed è quello che conta, se poi prima era corto, brutto e puzzolente non ha nessun valore adesso, perché sono decaduti quei motivi. Per quanto riguarda il casting, dici che è un limite, ed hai ragione, ma trascuri che con un'opzione del compilatore è possibile fare in modo che si comporti come in C#.

In definitiva, io credo che in nessun ambito C# sia superiore a VB, sebbene ci siano altri vantaggi a praticare il C#, come ad esempio beneficiare per primi di nuove funzionalità del compilatore che di solito vengono implementate in VB solo alla versione successiva.

Share this post


Link to post
Share on other sites
walterword

puoi parlare quanto vuoi e direi quello che vuoi , ma una cosa di giusto hai detto ....VB è inferiore .Punto .Ci sono motivi e motivi e tante cose da dire ma non serve a nulla.Ognuno e' libero di usare quello che vuole , io non lo uso perche ho i miei motivi .

I linguaggio orientati agli oggetti per eccellenza sono in C++ dal quale derivano java e c# con le relative piattaforme JVM e NET

Il basic per come e' nato ed e' stato progettato non ha niente a che vedere con gli oggetti , certo il vb.net ce lo hanno portato a furia di strati di m...e librerie etc ma non ha senso .Preferivo il VB 6 per come era stato congegnato e strutturato .

E al VB.net preferisco 1 milione di volte il python che e' molto potente , completo , supporta di tutto e di piu pur avendo un interprete .

Il C/C++ lo trovi ovunque , linux, winzoz , mac , java idem , il C# solo su winzoz senon su piattaforma mono che non ha nessun senso , .

Python , java e C/C++ li trovi su raspberry etc , il basic non lo trovi da nessuna parte o quasi .Per cui alcune ragioni sono queste , il VB.NET non c'entra nulla con gli oggetti nel senso che la sua architettura è stata adattata agli oggetti ma non lo è nativamente .Poi ripeto va bene anche lui , funziona anche lui etc etc 

 

Share this post


Link to post
Share on other sites
stilnovo

Sei veramente bravo ad argomentare le tue tesi.

Fammi vedere se ho imparato qualcosa da te... dunque.... concentrazione... si.

VB è meglio del C# perché ho lo dico io, ci sarebbero tanti motivi ma è inutile parlarne, perché se lo dico IO dovrebbe già essere sufficiente a farne un dogma. Ognuno di noi è libero se usare il TOP (cioè VB) oppure ripiegare sul C# e vivere comunque ignorante e contento.

Alla prossima walterword.

Share this post


Link to post
Share on other sites
stilnovo
Quote

Il basic per come e' nato ed e' stato progettato non ha niente a che vedere con gli oggetti , certo il vb.net ce lo hanno portato a furia di strati di m...e librerie etc ma non ha senso

 

Quote

il VB.NET non c'entra nulla con gli oggetti nel senso che la sua architettura è stata adattata agli oggetti ma non lo è nativamente

 

Dici cose assolutamente false, chissà se per ignoranza o volutamente. Parli di VB.NET come di un potenziamento del VB6. Perdiamo tempo.

Share this post


Link to post
Share on other sites
Nikiki

Calma e gesso (direbbe qualcuno) :lol::lol::lol:

Non vi azzuffate, il mondo è bello perché vario, non esiste un migliore assoluto, altrimenti utilizzerebbero tutti quello. 

Io ad esempio odio tutti i .net sia che si parli di C# che di VB,  per il semplice fatto che per far funzionare un programma di pochi Kbyte servono centinaia di Mbyte di librerie di framework... È vergognoso! 

Comunque per rimanere in topic, zinzo il .h probabilmente contiene i prototipi delle funzioni contenute nella DLL, includendo questo file nel progetto hai tutto quello che ti serve per compilarlo, ma ovviamente se provi ad eseguirlo ti dirà che non trova la DLL. 

Probabilmente il fornitore lo distribuisce perché in questo modo hai la possibilità di vedere le funzioni offerte dalla libreria, e farti così un'idea su di esse. 

A proposito... Il .h si usa in C/C++,  in VB non ho idea di come si utilizza una DLL. 

 

 

Share this post


Link to post
Share on other sites
Livio Orsini
Quote

se poi prima era corto, brutto e puzzolente non ha nessun valore adesso

 

Quando è nato (girava ancora sotto DOS) VB è stata una grande innovazione.

E' vero che è interpretato, ma l'interpretazione avviene all'atto del caricamento, ed in memoria c'è l'eseguibile. Non è come il basic storico che è interpretato riga per irga durante L'esecuzione. Quindi è più lento solo alla prima esecuzione.

 

Oggi ik tempo del VB è decisamente scaduto.

VB.net è stato fatto solo per mantenere un ponte con le decine di migliaia di applicativi in VB, molti dei quali funzionano egragiamente acora oggi.

L'intento di MS è stato usare il C# per sostituire sia VB che Java, forse l'intento non è riuscito appieno visto che Java continua ad essitere ed a prosperare e VB non viene abbandonato.

 

Share this post


Link to post
Share on other sites
lucios
Quote

A proposito... Il .h si usa in C/C++,  in VB non ho idea di come si utilizza una DLL. 

Come ho già spiegato precedentemente:

Se la DLL è NET compliant, cioè è stata fatta per essere utilizzata in .NET, può essere aggiunta come semplice riferimento.

Se invece è una DLL classica va importata (DllImport.....) però in questo caso occorre avere più informazioni su come è fatta.

Quote

Io ad esempio odio tutti i .net sia che si parli di C# che di VB,  per il semplice fatto che per far funzionare un programma di pochi Kbyte servono centinaia di Mbyte di librerie di framework... È vergognoso!

Perchè? Dalle tue parti costano molto i Mbyte? :lol::lol::lol:

Scherzi a parte, è vero ma l'infrastruttura del Net framework ha l'indubbio vantaggio di permetterti di sviluppare applicativi anche complessi in tempi decisamente minori rispetto al passato. Ovvio che la cosa non è gratuita sotto l'aspetto della memoria e dell'efficienza prestazionale (d'altronde anche Java è così) ma non penso che vorrai utilizzare DOTNET per sviluppare un'applicazione "Hello world".

Con i processori moderni comunque l'aspetto prestazionale ha sicuramente perso d'importanza, a meno che tu non progetti CAD 3D, direi che non devi porti problemi in questo senso.

Quote

VB.net è stato fatto solo per mantenere un ponte con le decine di migliaia di applicativi in VB, molti dei quali funzionano egragiamente acora oggi.

L'intento di MS è stato usare il C# per sostituire sia VB che Java, forse l'intento non è riuscito appieno visto che Java continua ad essitere ed a prosperare e VB non viene abbandonato.

Non ne sono così convinto, la scelta di dare la possibilità di sviluppare in più linguaggi all'interno dello stesso framework (C#, VB.NET, Visual C++, e anche F#) secondo me è stata una genialata di Microsoft. E non dimentichiamoci di ASP.NET e di tutto il parentame.

Share this post


Link to post
Share on other sites
lucios

Però scusate, quì stiamo andando fuori dal tema della discussione, l'amico ZINZO ha chiesto solo consigli riguardo all'interfacciamento di uno scanner.

Una discussione per confrontare i nostri punti di vista su quale linguaggio e/o ambiente di sviluppo sia il migliore (se ne esiste uno), è più che lecita e forse anche interessante, ma io aprirei una discussione apposita.

 

Share this post


Link to post
Share on other sites
stilnovo

 

Quote
Quote

se poi prima era corto, brutto e puzzolente non ha nessun valore adesso

 

Quando è nato (girava ancora sotto DOS) VB è stata una grande innovazione.

 

D'accordo Livio, io mi riferivo al fatto che le opinioni relative al vecchio VB (buone o cattive che siano) non dovrebbero compromettere o influenzare il giudizio su ciò che è oggi VB.NET. Ha mantenuto il nome, ma è un prodotto nuovo. Come dire che SCL di S7 "è" il pascal, solo perché ha imitato la sintassi di alcuni statement, quando invece sono linguaggi distanti anni luce. Per quanto riguarda il VB per DOS, me lo sono perso guardando i cartoni animati, ma ricordo alle superiori che ancora lo usava il prof di sistemi e automazione, in pochi colpi produceva un'applicazione che noi, studenti del C, non sapevamo nemmeno da dove iniziare.

 

Quote

VB.net è stato fatto solo per mantenere un ponte con le decine di migliaia di applicativi in VB, molti dei quali funzionano egragiamente acora oggi.

Io invece sostengo che è stato fatto per mantenere un ponte con i programmatori, per dargli l'illusione di non essere stati traditi/abbondanati dalla morte di VB6, quando invece le cose stavano proprio così. Hanno dovuto imparare a masticare roba nuova, e a tradimento scoprire che se volevano calarsi nei panni di VB.NET avrebbero dovuto rinnegare VB6 e imparare d'accapo un nuovo linguaggio, tolte ovviamente alcune keyword o costrutti fondamentali che sono rimasti simili.

 

Quote

Però scusate, quì stiamo andando fuori dal tema ...ma io aprirei una discussione apposita.

E non facciamo prima a cambiare il titolo a questa discussione ? :superlol: Scherzo, hai ragione.

Share this post


Link to post
Share on other sites
Livio Orsini
Quote

Io invece sostengo che è stato fatto per mantenere un ponte con i programmatori, per dargli l'illusione di non essere stati traditi/abbondanati dalla morte di VB6,

 

Si potrebbe dire che mutando l'ordine dei fattori il prodotto non cambia.:smile:

 

Quote

Non ne sono così convinto, la scelta di dare la possibilità di sviluppare in più linguaggi all'interno dello stesso framework

 

Lucios guarda che le differenze tra VB.net e C#.net sono impercettibili e, praticamente, solo nominali.

Quando è uscì la suite .net ne acquistai subito la versione entreprise ( che pirla sono stato) e inizia subito a sviluppare le medesime applicazioni di prova in VB ed in C# proprio per farmi la mano. Praticamente nessuna differenza.

Ora, da un po' di anni, ho abbandonato questi lavori perchè, visto che oramai lavoro solo per il mio piacere, non mi piaccioni più tanto.

Share this post


Link to post
Share on other sites
lucios
Quote

Lucios guarda che le differenze tra VB.net e C#.net sono impercettibili e, praticamente, solo nominali.

Appunto Livio, forse non mi sono spiegato bene.

Si mette in grado il programmatore di sviluppare con il linguaggio che preferisce garantendo l'ottenimento dello stesso risultato. Meglio di così...

Share this post


Link to post
Share on other sites
walterword

quando lavori per realizzare certe cose ti renderai conto che il VB.NET va bene per sviluppare app windows ma non per fare le cose "particolari"

Share this post


Link to post
Share on other sites
stilnovo
Quote

... ti renderai conto che il VB.NET va bene per sviluppare app windows

 

Ma noi qui quello ci facciamo.

 

Quote

... ma non per fare le cose "particolari"

 

Eeehh ??? Ah... si. Non ti preoccupare. Per quelle cose abbiamo chi la moglie, chi la ragazza. Grazie della dritta amico.

Share this post


Link to post
Share on other sites
walterword

sinceramente ...non so chi sei e nemmeno per quale motivo continui a controbattere.

Io la penso cosi e basta ....non continuare a menarla dai ...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...