Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-05-2007, 13:43   #1
toruntu
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?
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 13:56   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
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..
Calma .... facciamo chiarezza. Se ho capito bene, tu hai un eseguibile e un certo numero di DLL, giusto? Nella tua applicazione vuoi caricare delle risorse presenti in queste DLL.

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:
Remarks
AfxGetInstanceHandle always returns the HINSTANCE of your executable file (.EXE) unless it is called from within a DLL linked with the USRDLL version of MFC. In this case, it returns an HINSTANCE to the DLL.
La/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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 14:10   #3
toruntu
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);
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 14:26   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
si scusa ho dimenticato un pezzetto.. ecco il codice giusto per l'hInstance:

HINSTANCE hInstance = LoadLibrary("nomeprogetto.dll");
Ah infatti!

Quote:
Originariamente inviato da toruntu Guarda i messaggi
il problema è che non voglio passarlo a mano...
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:
Originariamente inviato da toruntu Guarda i messaggi
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);
Ma hai letto il remark relativo alla AfxGetInstanceHandle???
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 14:41   #5
toruntu
Member
 
Iscritto dal: May 2007
Messaggi: 59
Quote:
Originariamente inviato da andbin Guarda i messaggi
Ah infatti!

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").

Ma hai letto il remark relativo alla AfxGetInstanceHandle???
si ho letto ma non ho capito molto.... non saprei proprio come fare... soprattutto perchè ho visto la mia prima di riga di codice c++ solo 2 settimane fa....... se hai qualche semplice dritta mi fai un grosso favore...
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2007, 17:45   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
si ho letto ma non ho capito molto.... non saprei proprio come fare... soprattutto perchè ho visto la mia prima di riga di codice c++ solo 2 settimane fa....... se hai qualche semplice dritta mi fai un grosso favore...
Però dovresti specificare meglio quali sono le tue intenzioni riguardo questo nome della DLL. Da quanto dici non ti va bene mettere il nome della DLL in modo che sia "cablato" nel programma. Innanzitutto per quale motivo? Perché il nome della DLL potrebbe cambiare? O perché ci possono essere più DLL tra cui scegliere quella da usare?
Spiega meglio!!
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 07:45   #7
toruntu
Member
 
Iscritto dal: May 2007
Messaggi: 59
Quote:
Originariamente inviato da andbin Guarda i messaggi
Però dovresti specificare meglio quali sono le tue intenzioni riguardo questo nome della DLL. Da quanto dici non ti va bene mettere il nome della DLL in modo che sia "cablato" nel programma. Innanzitutto per quale motivo? Perché il nome della DLL potrebbe cambiare? O perché ci possono essere più DLL tra cui scegliere quella da usare?
Spiega meglio!!
perchè il nome della dll può cambiare a seconda della versione del programma... e anche perchè ci sono più dll...
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 08:11   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
perchè il nome della dll può cambiare a seconda della versione del programma
Ok

Quote:
Originariamente inviato da toruntu Guarda i messaggi
e anche perchè ci sono più dll...
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 08:20   #9
toruntu
Member
 
Iscritto dal: May 2007
Messaggi: 59
Quote:
Originariamente inviato da andbin Guarda i messaggi
Ok

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.
io nel codice ho degli "#ifdef nomeversione" e quindi a seconda di con che versione compilo mi esegue un codice piuttosto che un altro..

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).
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 08:41   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
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).
Quindi, tanto per fare un esempio, la dialog A userà sempre la dll X e la dialog B userà sempre la dll Y???
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 08:47   #11
toruntu
Member
 
Iscritto dal: May 2007
Messaggi: 59
Quote:
Originariamente inviato da andbin Guarda i messaggi
Quindi, tanto per fare un esempio, la dialog A userà sempre la dll X e la dialog B userà sempre la dll Y???
si... poi diciamo che la A userà sempre la X piuttosto che la X7 o Xb (a seconda della versione)... però la dll è sempre la stessa...
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 08:50   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
si... poi diciamo che la A userà sempre la X piuttosto che la X7 o Xb (a seconda della versione)... però la dll è sempre la stessa...
E allora dove sta il problema??
Carica tutte le DLL con LoadLibrary, quindi usa ciascun HINSTANCE ottenuto per caricare quello che vuoi, stringhe con LoadString, ecc...
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 08:51   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da toruntu Guarda i messaggi
io nel codice ho degli "#ifdef nomeversione" e quindi a seconda di con che versione compilo mi esegue un codice piuttosto che un altro..

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).
non ti va bene qualcosa tipo
Codice:
#ifdef VER_1_0
hInstance = LoadLibrary("Dll1.0.dll");
#elif VER_1_1
hInstance = LoadLibrary("Dll1.1.dll");
#endif
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 09:09   #14
toruntu
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;
}
il problema è che ho molte versioni... e vogliono un metodo migliore che passi a LoadLibrary il nome della dll che serve senza stare a fare tutti quegli ifdef e mettere manualmente tutte le possibili versioni...
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 09:32   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da toruntu Guarda i messaggi
il problema è che ho molte versioni... e vogliono un metodo migliore che passi a LoadLibrary il nome della dll che serve senza stare a fare tutti quegli ifdef e mettere manualmente tutte le possibili versioni...
E allora visto che hai una macro che indica la versione del progetto fai una cosa del genere: imposti una macro per es. PRJVER che vale 1, 2 .... ecc... (come la imposti vedi tu, se con #define o tramite switch del compilatore).

Poi componi il nome della DLL:
char szDll[20];
sprintf (szDll, "ver%d.dll", PRJVER);
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 12:47   #16
toruntu
Member
 
Iscritto dal: May 2007
Messaggi: 59
Quote:
Originariamente inviato da andbin Guarda i messaggi
E allora visto che hai una macro che indica la versione del progetto fai una cosa del genere: imposti una macro per es. PRJVER che vale 1, 2 .... ecc... (come la imposti vedi tu, se con #define o tramite switch del compilatore).

Poi componi il nome della DLL:
char szDll[20];
sprintf (szDll, "ver%d.dll", PRJVER);
però in questo modo devo comunque io indicare i tipi di versione... a me servirebbe un modo di trovare il path della dll che utilizza una determinata dialog... in questo modo potrei estrapolare solo la parte finale ("nome_versione.dll") e passare quello allo script... questa si che sarebbe una soluzione completamente dinamica... ma come ??
__________________
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
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2007, 07:55   #17
toruntu
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
toruntu è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2007, 13:54   #18
toruntu
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
toruntu è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
DAZN Full in sconto a partire da 19,99 e...
iPhone 18 Pro disponibile su Amazon a 1....
ECOVACS T90 OMNI a 439€ e T90 MAX OMNI a...
Questa Proscenic è la scopa elett...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v