Oppure

Loading
15/11/09 9:52
noitide
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.. :)
aaa
15/11/09 11:02
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:

msdn.microsoft.com/en-us/library/…
msdn.microsoft.com/en-us/library/…

aaa
15/11/09 12:28
noitide
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:

msdn.microsoft.com/en-us/library/…
msdn.microsoft.com/en-us/library/…


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ì:
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?
aaa
15/11/09 13:44
HeDo

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.

aaa
15/11/09 15:58
Il Totem
aaa
15/11/09 16:39
HeDo
Postato originariamente da Il Totem:

totem.altervista.org/guida/versione3/…
E successivi.


gran bel lavoro totem :)

parti da là è un'ottima guida :k:
aaa
16/11/09 19:37
noitide
perfetto, grazie 1000. ora la leggo se ho dubbi chiedo :rotfl: grazie ankora :k:
aaa