Bon dommage, c'est pas grave, merci quand meme

Quoi qu'il en soit SROD a créé un PBI de la gestion des COM en partant de Dishelper de C, tout comme TsSoft
La... ce n'est pas la meme chose, a mon humble avis de programmeur du dimanche...
On ne fait que lire la mémoire.
Point ici d'objet, de connection OLE / COM
Juste de l'acces mémoire pour lecture des pointeurs, c'est bien moins compliqué
La seule tuile comme il a dit mon amis DENIS...c'est que je me heurte a l'UNICODE et surement au BSTR qui est un format specifique de gestion des variable par BILOU et son VB de m....
KCC il va continuer, et peut etre qu'il trouvera une ame charitable pour l'aider un peu a chaque caillou qu'il rencontre
Et ben je viens de creuser et j'ai trouver une mine d'or
En fait le gars il utilise l'API LocalAlloc
Et il ecrit dans la mémoire et la relis.
Si "quinquin" de l'assistance ça lui dit quelque chose dans ses souvenirs ????
Ca a pas l'air trop trop compliqué, enfin pas pour moi evidemment

Mais le code est pas trop long, je ne sais pas si ca peut etre utilisable avec ma lecture de memoire ??
Code de la FORM
Code : Tout sélectionner
Dim VarExemple As String
Private Sub Form_Load()
' On donne une valeur à VarExemple
VarExemple = "Salut tout le monde"
Dim tStr As String
Dim lPointeur As Long
tStr = "Exemple d'utilisation des pointeurs mémoire" + vbCrLf + vbCrLf
tStr = tStr + "Variable 'VarExemple' : " + vbCrLf
tStr = tStr + " Valeur=" + VarExemple + vbCrLf
tStr = tStr + " Mise en mémoire de la chaine de caractère" + vbCrLf
lPointeur = PutStringInMemory(VarExemple)
tStr = tStr + " Adresse mémoire (pointeur)=" + Str$(lPointeur) + vbCrLf + vbCrLf
tStr = tStr + "En procédant à l'inverse : On part de son pointeur pour retrouver son contenu :" + vbCrLf
tStr = tStr + " GetStringFromPtr(" + Str$(lPointeur) + ")=" + GetStringFromPtr(lPointeur)
txtDebug.Text = tStr
DeleteStringInMemory lPointeur
End Sub
Code du module
Code : Tout sélectionner
Option Explicit
' permet de copier une chaine de caractère dans une autre
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
Public Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function LocalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Const LMEM_FIXED = &H0
Const LMEM_ZEROINIT = &H40
' Permet de récupérer la chaine de caractère en mémoire à partir de son pointeur
Public Function GetStringFromPtr(ByVal lPointeur As Long) As String
If lPointeur > 0 Then
GetStringFromPtr = Space(lstrlen(lPointeur))
lstrcpy GetStringFromPtr, lPointeur
End If
End Function
' Met une chaine de caractère en mémoire
' La fonction renvoie le pointeur vers le bloc mémoire
' Ne pas oublier de supprimer le bloc à la fin du prog
Public Function PutStringInMemory(ByVal Str As String) As Long
' Il faut terminer la chaine par vbnullstring
If Right(Str, 1) <> Chr$(0) Then Str = Str + Chr$(0)
' On copie la valeur de strValue en mémoire
PutStringInMemory = LocalAlloc(LMEM_FIXED Or LMEM_ZEROINIT, Len(Str))
lstrcpy PutStringInMemory, ByVal Str
End Function
' Supprime une chaine de caractère en mémoire
Public Function DeleteStringInMemory(ByVal lPointeur As Long)
LocalFree lPointeur
End Function
J'ai essayé d'adapter à mon code, en utilisant la fonction PEEK de VB....et j'obtiens come dab des hieroglyphes

Depuis un mois, KCC il devenu specialiste des pyramides et tout ce qui s'en suit

Il a ecris plus de papyrus en un mois que RAMSES dans toute son existence

Bon j'ai essayé ce code, mais peut etre qu'en comprenant celui du dessus on peut modifier le miens pour qu'il lise de l'ASCII
Mais j'ai aussi essayé avec PEEKBYTE et la j'obtiens des chaines vides...
C'est bien mieux, car je me demande cette fois si c'est pas l'histoire de l'unicode et l'octet en trop
Je doit peut etre lire que l'octet vide ou un truc comme ça
Au fait.... en reponse a mon ami DENIS, je prefererais ne pas compiler en UNICODE mes DLL.
J'ai peur que ça foute le "waï" dans toutes mes fonctions
Apres tout c'est VB qui fait le malin...alors c'est a VB d'etre puni

Une fois que j'aurais trouvé comment lire une DLL C avec VB, je devrais pouvoir lire une DLL PB avec VB
Voila ma daube
Code : Tout sélectionner
' http://www.xtremevbtalk.com/showthread.php?t=44459
'\\ API declarations...
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Long, Source As Long, ByVal Length As Long)
Private Declare Sub CopyMemoryByte Lib "kernel32" Alias "RtlMoveMemory" (Destination As Byte, Source As Long, ByVal Length As Long)
Private Declare Sub CopyMemoryFromByte Lib "kernel32" Alias "RtlMoveMemory" (Destination As Long, Source As Byte, ByVal Length As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
Private Declare Function ListStrings Lib "test.dll" (ByVal PointerArray As Long, Number As Integer) As Long
Private Sub Form_Load()
Dim ArrayString(10) As String, IdMemory As Long, Phrase As String
ArrayString(0) = Trim(Str(UBound(ArrayString)))
For i = 1 To 10
ArrayString(i) = "Sentence " + Str(i)
Next
IdMemory = ListStrings(VarPtr(ArrayString(0)), 10)
MsgBox IdMemory
For i = 0 To 10
Phrase = Phrase + GetStringFromPtr(PeekByte(IdMemory + i)) + Chr(13)
Next
MsgBox Phrase
End Sub
Public Function Peek(Address As Long) As Long
Call CopyMemory(Peek, ByVal Address, Len(Address))
End Function
Public Function PeekByte(Address As Long) As Byte
Call CopyMemoryByte(PeekByte, ByVal Address, Len(PeekByte))
End Function
' Permet de récupérer la chaine de caractère en mémoire à partir de son pointeur
Public Function GetStringFromPtr(ByVal lPointeur As Long) As String
If lPointeur > 0 Then
GetStringFromPtr = Space(lstrlen(lPointeur))
lstrcpy GetStringFromPtr, lPointeur
End If
End Function
Bon faut que j'y alle sinon c'est le divorce assuré, ....si "quinquin" il peut au moins me guider, avec ces histoire d'UNICODE et BSTR...ça serait trop cool
Encore merci de votre attention
