|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Ma è qui che ti sbagli, sbagli il modo di pensare...
Una dll di quel genere è un ActiveX, e quindi va registrata e quindi già non pottresti basarti sul fatto di cercare le dll come se fossiano file, perchè nn si comportano come file. Come già detto, il tuo programma già deve supportare tutti i tuoi plug-in, o almeno mettendola più facilemente, devi già prevedere quanti plug in vuoi fare, poi che li fai piano piano dopo che l'exe è già sul "mercato" è un altro conto. Ma quando fai un software c'è sempre un analisi, non si comincia mai scrivendo la prima riga e poi pensando alla cosa da fare dopo, ma bisogna sapere ed avere un percorso ben preciso per fare un bel lavoro, in meno tempo e soprattutto più ottimizzato. Quindi tu devi giocare sul fatto che ti dia errore quando istanzi il tuo plug-in, li fai quello che vuoi, puoi nascondere il menu volendo, ma il tuo menu è già stato progettato con il codice per lanciare il tuo plug-in. Tornando alla tua prima domanda, il nome della dll è un bel problema! Dentro a VB lui prende il nome dell'Applicazione che gli hai impostato alla tua dll, e quindi dentro a VB lo sai che si chiama come hai impostato tu, es: Plug_In ... e quindi li nn è un problema, il problema ma li nn ci puoi fare NULLA è che se un pirla ti rinomina, elimina o sposta una dll dalla tua cartella dove l'hai posizionata il tuo programma nn avrà più il plugin, ma se ci pensi bene, se cancelli una dll di sistema da system32, nn so poi se ti parte più il pc senza dare nessun problema.
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
una domanda...programmi come ad esempio FireFox che permettono di estendere le loro funzionalità tramite plugin funzionano molto più dinamicamente o mi sbaglio?
non credo ci sia una limitazione sul numero di plugin caricabili o sul nome da dargli...io vorrei una cosa tipo quella ma che quando poi eseguo la plugin mi si apre una sorta di programma a parte, come hai fatto tu con la form.... è possibile arrivare ad una cosa del genere?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Bhe questo nn lo so, ma sicuramente FF nn è fatto in VB
PS: ma dove si caricano i plugin in firefox ?
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein Ultima modifica di matpez : 06-07-2005 alle 18:43. |
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Quote:
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
|
#25 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Quote:
Mi son letto cosa fa ognuna di queste due API: Codice:
LoadLibrary The LoadLibrary function maps the specified executable module into the address space of the calling process. VB4-32,5,6 Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Parameter Information · lpLibFileName Points to a null-terminated string that names the executable module (either a .DLL or .EXE file). Codice:
GetProcAddress The GetProcAddress function returns the address of the specified exported dynamic-link library (DLL) function. VB4-32,5,6 Declare Function GetProcAddress Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Long, ByVal lpProcName As String) As Long Parameter Information · hModule Identifies the DLL module that contains the function. The LoadLibrary or GetModuleHandle function returns this handle. · lpProcName Points to a null-terminated string containing the function name, or specifies the function’s ordinal value. If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero. Return Values If the function succeeds, the return value is the address of the DLL’s exported function.
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC Ultima modifica di leadergl : 07-07-2005 alle 07:25. |
|
|
|
|
|
|
#27 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
con LoadLibrary carichi la dll nel tuo processo (ti viene restituito un HMODULE, corrispondente al suo base address); con GetProcAddress invece ottieni un puntatore ad una sua funzione: GetProcAddress prende in ingresso l'HMODULE che identifica la tua dll e il nome della funzione che vuoi caricare (se la dll è scritta in C++ occhio alla decorazione dei nomi). se ad es. stabilisci che i tuoi plugin devono esportare una funzione che si chiama "PluginEntry" (nome inventato), basta che dopo aver caricato la libreria con LoadLibrary chiami GetProcAddress passandogli l'HMODULE che hai ottenuto e "PluginEntry", e ottieni l'indirizzo della funzione PluginEntry pronta da chiamare.
per caricare numerosi plugin leggendoli da una directory basta che fai ad esempio un array di strutture dati ognuna delle quali contiene l'HMODULE del plugin caricato e l'indirizzo della PluginEntry; le dimensioni dell'array corrispondono semplicemente al numero di plugin validi contenuti nella apposita directory, quindi direi che l'array deve crescere dinamicamente a mano a mano che carichi sti plugin. l'esempio te lo posso fare solo in C, o al limite in Pascal: io di BASIC conosco solo il QBasic |
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
L'esempio in C mi sta bene...quello che non capisco è come fare ad esare il "puntatore" che mi viene restituito dalla procedura "GetProcAddress".
GetProcAddress ha in uscita un valore LONG...come lo uso? mi serve un altra funzione a cui passare questo valore e che mi esegue la funzione della mia DLL?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
AHHHH forse ho capito...allora...vediamo un po!
Prima, ad esempio in un modulo, dichiaro una procedura tipo le chiamate alle API di Windows in questo modo: Codice:
Private Declare Function AvviaPlugIN Lib "miaDll" Alias "AvviaPlugINA" (variabili) As Long Codice:
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Codice:
AvviaPlugIN Il problema potrebbe essere nel nome della DLL ma questo lo potrei ricavare dal nome fisico della mia DLL giusto? Il secondo problema verrebbe che in questo modo avrei una sola DLL caricabile a meno che non creo una procedura dove metto la dichiarazione della funzione...(sempre se si può fare) tipo: Codice:
Public Sub AvviaDLL(nome_dll as string)
Dim esiste_funct as boolean
Private Declare Function AvviaPlugIN Lib nome_dll Alias "AvviaPlugINA" (variabili) As Long
Esiste_funct=...chiamo la procedura che verifica l'esistenza...
if esiste_funct then AvviaPlugIN
End Sub
ditemi se mi sto avvicinando... Questa la funzione per verificare l'esistenza di una funzione in una dll: Codice:
Private Function Esiste_funct(ByVal ModuleName As String, ByVal ProcName As String) As Boolean
Dim hModule As Long
Dim lpProc As Long
Dim FreeLib As Boolean
'carichiamo il modulo
hModule = LoadLibrary(ModuleName)
FreeLib = True
'se il modulo è caricato allora verifichiamo
'se la procedura esiste
If hModule Then
lpProc = GetProcAddress(hModule, ProcName)
Esiste_funct = (lpProc <> 0)
End If
'scarichiamo la libreria dalla memoria
If FreeLib Then Call FreeLibrary(hModule)
End Function
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
tra le altre cose posso anche dichiarare:
Codice:
Private Declare Function AvviaPlugIN Lib "miaDll.dll" Alias "AvviaPlugINA" (variabili) As Long rimarrebbe questo: Quote:
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
ehi mi sto avvicinando?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
#32 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
cmq tornando alla GetProcAddress: non ti era chiaro come dovevi usare il risultato; be', fisicamente devi solo usarlo in una CALL, quel LONG contiene l'indirizzo della funzione che devi chiamare; memorizzalo in un puntatore a funzione con un cast e poi chiama la funzione tramite il puntatore. più chiaro di così... |
|
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
Quote:
con codice pratico si farebbe come?
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
la GetProcAddress mi restituisce sempre 0...xkè?
l'altra invece mi da un valore...
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:42.



















