Récupérer une ressource string depuis une DLL ?

Résolu
CreeAlaVaVite Messages postés 2 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 4 décembre 2008 - 4 déc. 2008 à 18:43
CreeAlaVaVite Messages postés 2 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 4 décembre 2008 - 4 déc. 2008 à 19:04
Bonjour à tous, j'ai un petit problème : comment pourrais-je récupérer une ressource sous forme de string depuis un exécutable (ou dll), sachant que je connais par exemple cette information (récupérée dans la base de registre) : @%SystemRoot%\System32\audiosrv.dll,-205 ?


Cette info pointe sur une string dans une dll, et je me demande bien comment la récupérer ?

Peu importe le langage, j'adapterai moi-même en vb.net, j'aimerais juste connaître la méthode !


Je vous remercie par avance chers développeurs !

1 réponse

CreeAlaVaVite Messages postés 2 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 4 décembre 2008
4 déc. 2008 à 19:04
J'ai bien progressé dans ma recherche, et j'ai codé çà qui fonctionne très très bien :



Option
Strict
On

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>








 






Imports
System





Imports
System.Text





Imports
System.Runtime.InteropServices






 






Public


Class
Form1






 







   
< DllImport(
"User32"

,

SetLastError: =
True

)>

_






   

Public


Shared


Function
LoadString(
ByVal
hInstance
As
IntPtr,
ByVal
uID
As
UInt32,
ByVal
lpBuffer
As
Text.StringBuilder,
ByVal
nBufferMax
As


Integer

)



As


Integer









   

End


Function









 







   

Declare


Auto


Function
LoadLibrary
Lib


"kernel32.dll"

(

ByVal
lpFileName
As


String

)



As
IntPtr






 







   
<DllImport(
"kernel32.dll"

,

SetLastError:=
True

,

EntryPoint :=
"FreeLibrary"

)>

_






   

Public


Shared


Function
FreeLibrary(
ByVal
hModule
As
IntPtr)
As


Boolean









   

End


Function









 







   

Private


Sub
Form1_Load(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
MyBase.Load






       

Dim
id
As
UInteger






       

Dim
hInst
As
IntPtr = LoadLibrary(
"c:\windows\system32\audiosrv.dll"

)










       

Dim
sb
As


New
StringBuilder(

1024


)










       

For
id =

1



To



65536










           

Dim
len
As


Integer

= LoadString(hInst, id, sb, sb.Capacity)






           

If

(len >

0


)



Then




                Debug.Print(
CStr

(

id)&
" -- "

& sb.ToString)






           

End


If









       

Next
        FreeLibrary(hInst)










 







   

End


Sub








End


Class







Bon ben si çà peut servir à d'autres...
N'hésitez pas svp à commenter si il y a mieux/si c'est pas bien codé, MERCI !
3
Rejoignez-nous