Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Le 10 migliori offerte Amazon di Pasqua:...
Nuove fotografie dagli astronauti di Art...
La toilette della capsula Orion Integrit...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
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: 23:37.


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