Newsgroup: it.comp.lang.visual-basic
Titolo: caricare risorse da file res esterni all'exe

Ciao
mi chiedevo se era possibile con VB6 usare risorse compilate in file res 
che non sono poi stati linkati ai sorgenti (ma che si trovano in un file 
distribuito con i binari dell'applicativo...)
Dav



si', si puo' ed in diversi modi
il piu' facile da scrivere e testare e' fare e' inserire le risorse in
una dll activex
se vuoi puoi facilmente avere la flessibilita' di usare risorse
personalizzate per localizzazione (non solo stringhe, ma anche
immagini etc.) e/o in base a funzionalita' incluse o meno nell'
applicazione.
definisci una semplice interfaccia con le funzioni
di estrazione risorse che ti interessano e la fai implementare
dalle tue dll.
il vantaggio di questa soluzione e' che puoi caricare le dll
a runtime ed continuare ad usare l'early binding tramite
l'interfaccia comune.
--
ciao, hal
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Un sistema semplice e' quello di creare una DLL ActiveX con una classe e un 
paio di metodi che rimappano le funzioni LoadResXXX; a questo punto compila 
le risorse nella DLL invece che nell'EXE e a runtime richiama da 
quest'ultimo i metodi della prima
Per applicazioni multilingua la cosa e' ancora piu' comoda perche' al posto 
di avere un sorgente con X file risorse, che ti obbliga a ricompilare, 
oppure un sorgente con un unico grosso file di risorse e vari offset, puoi 
sostituire solo la DLL incriminata, che avra' solo le risorse della lingua 
desiderata
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown 

 ha scritto nel messaggio
news:Xns95FE9941...@130.133.1.4...

Io ti indico una soluzione alternativa che personalmente preferisco a quella
basata sulla DLL ActiveX (perché ho più DLL "satellite", ciascuna relativa ad
una lingua), ma un pelino più complicata.
A partire da un file .RES puoi generare una DLL standard contenente le risorse,
tramite il linker stesso di VB.
Una volta che hai la DLL, la carichi a runtime con l'API LoadLibrary e ne leggi
le risorse con l'API LoadString.
Questo articolo spiega meglio ciò che intendo:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q232625
Bye
Raf

 
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q232625
No, ho cannato articolo... in effetti questo sopra parla proprio della prima
soluzione (ActiveX).
Dato che non riesco piů a trovarlo, ti posto un pezzo di codice:
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal
lpLibFileName As String) As Long
Private Declare Function LoadString Lib "user32" Alias "LoadStringA" (ByVal
hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, ByVal nBufferMax
As Long) As Long
Public Function GetResString(ByVal StringID As Long, ByVal DLLName As String) As
String
Dim hLib        As Long
Dim Text        As String
Dim rc          As Long
Const MAX_STRING_SIZE = 4096
    hLib = LoadLibrary(App.Path + "\" + DLLName)
    If hLib <> 0 Then
        Text = Space(MAX_STRING_SIZE)
        rc = LoadString(hLib, CInt(StringID), Text, MAX_STRING_SIZE)
        If rc <> 0 Then
            GetResString = Left(Text, rc)
        End If
    Else
        ' C'č stato un errore ad es. DLL inesistente...
    End If
End Function
HTH
Raf

 risorse, tramite il linker stesso di VB.
scusa mi puoi dare 2 spiegazioni in piu su questo passo?
se io creo con VC una DLL standard con le risorse è lo stesso?
grazie
Dav

 ha scritto nel messaggio
news:Xns96016FBE...@130.133.1.4...

Credo proprio di sì.
Altrimenti se hai il file .RES creato con l'editor di risorse di VB (oppure
ottenuto compilando un file .RC) puoi trasformarlo in DLL con il comando
LINK /verbose /noentry /dll /out:MyRes.dll MyRes.res
Bye
Raf

LINK /verbose /noentry /dll /out:MyRes.dll MyRes.res
guarda che non funziona ...... da errore :
Link: fatal error LNK:1158 cannot run "cvtres.exe"

 ha scritto nel messaggio
news:MdHRd.563663$b5.25...@news3.tin.it...

Naturalmente deve innanzitutto essere installato anche VC++.
Quindi occorre che la cartella "C:\Programmi\Microsoft Visual Studio\VC98\Bin"
sia in PATH, altrimenti non lo trova.
Č sufficiente avviare VCVARS32.BAT (che si trova in quella stessa cartella)
prima del linker.
Bye
Raf

ok scusami...   non sono un esperto !