|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
[C++] Path della dll in uso!
Ciao a tutti, io ho una serie di progetti, ogni progetto ha le proprie
risorse (dialog,menu,string table). Devo poter caricare le risorse di un progetto piuttosto che di un altro dinamicamente. Ho una funzione LoadStringFromDLL(HINSTANCE hInstance, int ID) che riceve l'hinstance e l'id e DOVREBBE usarli per caricare la risorsa del progetto in esecuzione e la relativa stringa nella string table. Se io infatti creo "a mano" l'hinstance settando la dll, per esempio HINSTANCE hInstance = "nomeprogetto.dll" e poi la passo insieme all'ID alla funzione, tutto va per il meglio... Ma se provo a rendere tutto ancora più dinamico, e non dover mettere manualmente il nome della dll per ogni progetto, non funziona... Ho utilizzato queste due righe di codice: char Buffer[255]; GetModuleFileName((HMODULE)AfxGetInstanceHandle(),Buffer,255); ma il path che mi restituisce è sempre quello del progetto di default, da cui parte tutto... io vorrei una funzione che mi restituisse il path del progetto attualmente in uso per poi passarlo alla funzione LoadStringFromDLL... Mi spiego meglio... Se apro una dialog che non è nel progetto base (ProgA) ma è nel progetto ProgB, vorrei poter ricevere il path della dll del ProgB! Così da poterla passare alla funzione e rendere tutto dinamico.. E' possibile fare tutto ciò? E' un po' che cerco, ma qui in azienda ho molti siti bloccati compreso google, solo google gruppi è in white list... Chi mi aiuta? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Innanzitutto un HINSTANCE non è una stringa, quindi dire HINSTANCE hInstance = "nomeprogetto.dll" non ha senso. Se poi si legge la documentazione di AfxGetInstanceHandle() si scopre che: RemarksLa/le DLL sono collegate in modo implicito o esplicito all'eseguibile?? In ogni caso ti serve avere il HINSTANCE del modulo che contiene le risorse, cioè della DLL.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
si scusa ho dimenticato un pezzetto.. ecco il codice giusto per l'hInstance:
HINSTANCE hInstance = LoadLibrary("nomeprogetto.dll"); il problema è che non voglio passarlo a mano... mi serve avere, come hai detto giustamente tu, l'HINSTANCE del modulo che contiene le risorse, cioè della DLL... Invece per ora ho solo sempre ottenuto il path dell'eseguibile con questo comando: GetModuleFileName((HMODULE)AfxGetInstanceHandle(),Buffer,255); |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ok, allora come pensi di specificarlo? O lo metti in un file di configurazione o lo passi negli argomenti del programma o lo determini magari scansionando la directory dove risiede l'exe per cercare le eventuali DLL (a mo' di "plug-in"). Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Spiega meglio!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ok ma la scelta di una tra le varie dll quando deve essere fatta? A runtime? In base ad altre condizioni? Preconfigurata dall'utente (es. "da oggi uso la dll B piuttosto che la A")? A questo punto fai prima a configurare il nome della DLL in un file di configurazione (es. .ini) o ad esempio nel registro di Windows.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
Quote:
poi nel programma alcune dialog usano risorse di una dll e altre dialog di altre dll... ed è li che devono appunto essere caricate dinamicamente.. se non cambia la dll ogni dialog richiama sempra la risorsa del progetto dell'eseguibile... e quindi caricano tutte le stesse stringhe e sono poi tutte uguali.. (dove gli ID conicidono). |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Carica tutte le DLL con LoadLibrary, quindi usa ciascun HINSTANCE ottenuto per caricare quello che vuoi, stringhe con LoadString, ecc...
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
#ifdef VER_1_0
hInstance = LoadLibrary("Dll1.0.dll");
#elif VER_1_1
hInstance = LoadLibrary("Dll1.1.dll");
#endif
|
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
è quello che faccio ragazzi... ecco il codice del metodo:
Codice:
HINSTANCE XXX::LoadLb()
{
CString project_name;
#ifdef ver1
project_name = "ver1.dll";
#else
project_name = "ver2.dll";
HINSTANCE hInstance = LoadLibrary(project_name);
return hInstance;
}
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Poi componi il nome della DLL: char szDll[20]; sprintf (szDll, "ver%d.dll", PRJVER);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#16 | |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
Quote:
__________________
Nessuno visita i tuo sito? Rivolgiti a zioSEM! Una web agency di Torino specializzata nel web marketing. Ti vuoi svagare? Giochi gratis e viaggi in camper |
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
nessuno conosce un modo per aiutarmi?
__________________
Nessuno visita i tuo sito? Rivolgiti a zioSEM! Una web agency di Torino specializzata nel web marketing. Ti vuoi svagare? Giochi gratis e viaggi in camper |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: May 2007
Messaggi: 59
|
possibile che non ci sia una soluzione?
__________________
Nessuno visita i tuo sito? Rivolgiti a zioSEM! Una web agency di Torino specializzata nel web marketing. Ti vuoi svagare? Giochi gratis e viaggi in camper |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:09.




















