Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - selezionare dll 32 o 64 bit
Forum - C# / VB.NET - selezionare dll 32 o 64 bit

Avatar
noitide (Normal User)
Pro


Messaggi: 107
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 10:52
Domenica, 15/11/2009
buon giorno a tutti, ho un problema di questo genere: nel mio programma utilizzo delle dll scaricate da internet (chiamate chilkatdotnet) che mi permettono di svolgere varie funzioni tra cui l'unzip. il problema sorge quando devo far funzionare il programma su un ke ha un sistema operativo a 64 bit, infatti queste dll hanno due versioni: 32 e 64 bit. ho già il codice per determinare se su un pc è in esecuzione un sistema operativo a 32 o 64 bit, come faccio a far usare al programma la dll a 32 o la dll a 64??
ho pensato anke di mettere insieme le due dll in un'unica creando due classi una chiamata prova_32 e l'altra prova_64 per poi importare una classe diversa in base al sistema operativo ma non ho idea se questo sia fattibile o no.. potete aiutarmi?? ringrazio anticipatamente.. :)

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:02
Domenica, 15/11/2009

la soluzione si chiama dynamic linking:

1) Ottieni il tipo del sistema operativo (32/64)
2) Carichi la dll "giusta"
3) Ottieni l'entry point della funzione che ti serve
4) Chiami la funzione

guardati le api LoadLibrary e GetProcAddress sull'msdn:

http://msdn.microsoft.com/en-us/library/ms683212%28VS.85%2 ...
http://msdn.microsoft.com/en-us/library/ms684175%28VS.85%2 ...


PM Quote
Avatar
noitide (Normal User)
Pro


Messaggi: 107
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 13:28
Domenica, 15/11/2009
Testo quotato

Postato originariamente da HeDo:


la soluzione si chiama dynamic linking:

1) Ottieni il tipo del sistema operativo (32/64)
2) Carichi la dll "giusta"
3) Ottieni l'entry point della funzione che ti serve
4) Chiami la funzione

guardati le api LoadLibrary e GetProcAddress sull'msdn:

http://msdn.microsoft.com/en-us/library/ms683212%28VS.85%2 ...
http://msdn.microsoft.com/en-us/library/ms684175%28VS.85%2 ...



innantitutto grazie 1000 dell'aiuto, ma devo essere sincero.. ho letto e riletto più volte e non ho molto ben capito, poi (per errore mio) mi sono dimenticato di specificare il linguaggio ke è vb.net, ho visto ke gli esempi ke mi hai mandato tu sono in C/C++ (non so quale dei due :D) ma ho visto ke c'è anke la sintassi del vb.net e dice di dichiararlo così:
Codice sorgente - presumibilmente VB.NET

  1. Public Declare Auto Function LoadLibrary Lib "kernel32" (ByVal lpLibFileName As String) As IntPtr


infatti l'ho dichiarato così e penso ke se metto loadlibrary(persorso as string) dovrebbe caricare la dll. il problema è ke: dove lo metto questo pezzo di codice? e se metto quello devo togliere gli imports?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:44
Domenica, 15/11/2009

ah, mi sono sbagliato, quella è la procedura per caricare una dll nativa win32, te hai due assembly .net e le cose si fanno in maniera diversa.

Leggi una guida sulla reflection e ti indico che tutto parte dal metodo Assembly.Load
che permette di caricare un assembly a runtime. Ovviamente devi togliere gli imports e lavorare con un'interfaccia che potresti scriverti ad hoc.


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:58
Domenica, 15/11/2009

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 17:39
Domenica, 15/11/2009
Testo quotato

Postato originariamente da Il Totem:

http://totem.altervista.org/guida/versione3/A44%20-%20La%2 ...
E successivi.



gran bel lavoro totem :)

parti da là è un'ottima guida :k:

PM Quote
Avatar
noitide (Normal User)
Pro


Messaggi: 107
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 20:37
Lunedì, 16/11/2009
perfetto, grazie 1000. ora la leggo se ho dubbi chiedo :rotfl: grazie ankora :k:

PM Quote