WinTricks Forum

WinTricks Forum (http://forum.wintricks.it/index.php)
-   Programmazione (http://forum.wintricks.it/forumdisplay.php?f=21)
-   -   [VB.NET] COME IMPORTARE ED UTILIZZARE UNA DLL ESTERNA? (http://forum.wintricks.it/showthread.php?t=117917)

Fast-M 01-03-2007 16.53.37

[VB.NET] COME IMPORTARE ED UTILIZZARE UNA DLL ESTERNA?
 
Salve, ho una dll che risiede in un file esterno e gestisce un lettore di smart card e vorrei utilizzarla in vb .net.
Qual'è il modo più rapido per potere accedere alle funzioni di questa dll che mi permettono di gestire il lettore di smat card?
Inoltre, come si fa in genere a vedere quali sono i nomi delle funzioni di una dll?
Dovrei basarmi su una documentazione esterna che mi viene fornita con la dll e soprattutto non mi viene abilitata la prediction automatica per queste funzioni mentre scrivo il codice come avviene invece per tutto il resto in .net?
Cioè una volta richiamata la dll ed assegnata una reference che chiamo miaDll se scrivo:

miaDll.

non mi usciranno in automatico le funzioni di questa dll che ho importato e referenziato in qualche modo?
Grazie come sempre!

P8257 WebMaster 01-03-2007 17.08.02

Allora, andiamo per ordine... La dll va aggiunta come riferimento al progetto e questo mi sembra che tu l'abbia già fatto e suppongo anche che la dll sia essa stessa scritta in .net comunque:

Una votla che hai aggiunto la dll come riferimento, ti basta andare nel ramo Riferimenti o References, selezionare la dll e navigare seguendo l'alberatura, nel pannello principale ti si aprirà il visualizzatore oggetti che ti permetterà di vedere classi, metodi e proprietà esportati (e non ) dalla stessa liberia .. ed è così che va usata ..per esempio:

Se la dll "pincopallino.dll" esporta un namespace di tipo "vattelapesca" con un metodo tipo: "pizzaefichi" per usarlo dovrò fare prima Imports del name space, poi creare un oggetto di tipo "vattelapesca" e poi usare su quell'oggetto il metodo "pizzaefichi", esattamente come già fai per le librerie di sistema che .net ti mette a disposizione.

Ultima cosa, prima di usare la dll, vedi se è disponibile una documentazione di utilizzo, perché l'object browser ti permette soltanto di vedere metodi classi e proprietà ma nella maggior parte dei casi non ti dà altre spiegazioni esaurienti...

Fast-M 01-03-2007 17.29.57

Io sono andato in Riferimenti e ho cercato di aggiungere la dll tramite la scheda Sfoglia in cui mi permette di selezionare un file esterno.
Purtroppo appena faccio doppio click sulla dll mi dice:
"Impossibile aggiungere un riferimento a "C:\percorso_della_dll\nomeDll.dll" Verificare che il file sia accessibile e l'assembly o il componente COM sia valido"

Non riuscendo quindi ad aggiungerlo in questo modo ho pensato che inserendo una direttiva di Function Declare ... oppure un <Imports ...
da codice comunque potessi utilizzare la dll o mi sbaglio?
Bisogna per forza aggiungere il riferimento manualmente prima di poter importare la dll da codice vb net?
Grazie!

P8257 WebMaster 01-03-2007 17.52.04

Ecco appunto, la dll probabilmente non è scritta in .net e non è nemmeno scritta con interfaccia COM+ (hai provato anche ad aggiungerla dal tab COM?).. quindi devi usarla in modo "diretto" come utilizzeresti una API nativa del sistema...

Codice:


Imports System.Runtime.InteropServices;
  <DllImport("TUADLL.DLL", EntryPoint:="EntryPoint", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, _
      CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function AliasDelMetodo(ByVal Parametro _
        As Tipo) As Ritorno
        ' Implementazione vuota, verrà riempita automaticamente a runtime
    End Function

Ecco che qui l'esigenza di avere una documentazione diventa ancora più seria.. perché per usare questo codice devi sapere non solo l'entry point della dll, ma anche il nome del metodo (e i tipi di dati che riceve in input e in output) da sostituire a "tuometodo" e "parametro".

Fatto questo la chiami in modo statico
Codice:


Ritorno = AliasDelMetodo(parametri...);

In sostanza equivale alla vecchia sintassi VB:
DECLARE Function "nomealias" LIB "nomedll" AS "Alias"...

Per ulteriori informazioni ed esempi cerca : "call api vb.net"

Fast-M 01-03-2007 19.41.13

No, ho trovato la giusta dll e sono riuscito ad importarla tramite i riferimenti.
Praticamente a quella dll di prima è stata aggiunta un'altra dll che ha la funzione di fare una specie di transcodifica da vb6 a vb.net.
Quindi ho aggiunto quella per dot net e non mi da alcun errore.
Mi chiedevo solo se a questa dll dovessi anche aggiungere in qualche modo il riferimento alla precedente oppure se questo è fatto in automatico dalla nuova dll per dot net.
Comunque ora l'unico problema è che quando avvio un pò di codice che ho scritto grazie al tuo aiuto mi dice che non riesce a trovare l'entry point.
Come faccio?
:|

P8257 WebMaster 02-03-2007 09.27.57

Ok allora se hai trovato la dll gestita il mio ultimo post non ti serve ma è valido il ragionamento fatto nel mio primo post.. cioè vale a dire che hai la vita maggiormente semplificata dal fatto che la dll stessa è gestita, ti faccio un esempio di uso...

Io ho una dll che sichiama DataAccessLayer.dll che ha dei namespace all'interno con relative classi e metodi per l'accesso a varie basi dati...
Tra i namespace esportati c'é il namespace DAL, quindi se io voglio usare questa dll in vb.net, non dovrò fare altro che aggiungerla nei riferimenti del progetto come hai fatto tu e poi scrivere semplicemente l'Imports della dll e poi istanziare un oggetto appartenente al namespace che voglio utilizzare, da questo oggetto poi potrò chiamare i metodi della classe oppuer estendere la classe a mio piacimento..

Esempio:
Codice:

Imports DSiteDAL

Module Module1


    Sub Main()

        Dim D As DAL
        D.GetObjectsByDirectQuery() ......

     
    End Sub

End Module

Come detto:
1 importo la dll
2 istanzio l'oggetto
3 chiamo il metodo

Fast-M 02-03-2007 15.21.18

Si, ma il problema dell'entry point che non viene trovato?

LoryOne 03-03-2007 11.52.24

Dipende da quali chiamate API vengono effettuate dalla dll in VB6 che dipendono a loro volta dalle librerie di sistema che a loro volta impongono tipologie di parametro.
L'errore di entry point dipende sempre da questi 3 fattori.
Ti consiglio di ricompilare la stessa dll sotto VB.NET, modificando il codice VB6 della dll.


Orario GMT +2. Ora sono le: 22.46.07.

vBulletin 3.8.6 - Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.