[.net2] CopyMemory [Résolu]

Signaler
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Bonsoir,
J'ai une ancienne fonction en vb6 et je suis en train de la passer en .net mais je rencontre un problème avec CopyMemory
Ci-dessous le bout de code qui me pose problème

Je pense qu'il faut utiliser la classe marshal au lieu de CopyMemory mais je ne sais pas comment m'y prendre
Si quelqu'un pouvait m'orienter ou m'apporter un peu d'aide cela m'aiderai beaucoup

------------------------------------------------------------
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Function chkdsk_Callback(ByVal Command As Long, ByVal Action As Long, ByVal Info As Long) As Byte

Dim progress as Long

CopyMemory VarPtr(progress), Info , 4

MaProgressbar.Value = progress

ChkdskCallback = 1

End Sub

--------------------------------------------------------------

4 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
je crois avoir vu l'instruction:

CopyMemory ByVal VarPtr(percent), ByVal ActionInfo, 4
équivallent à ça:

CopyMemory percent, ByVal ActionInfo, 4





Vérifie tes données, est-ce que c'est bien des Long ou des Integer.

"progress as Long" ne doit faire 4 en net



sinon voir quelques infos ici:

http://www.vbfrance.com/forum.v2.aspx?ID=605661



Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Ok j'ai lu les réponses du lien du post que tu as donné
J'avais déjà lu toutes ces infos en recherchant sur google mais sans succès,
Merci de ton aide je post la solution si cela peut servir.

8<-------------------------------------------------------------------------


Public Function Chksdk_Callback(ByVal cmd As Integer, ByVal options As Integer, ByVal info As IntPtr) As Byte


Dim iProgress As Integer
Dim unmanagedBlock(3) As Byte


Select Case cmd
Case 0
Marshal.Copy(info, unmanagedBlock, 0, 4)
iProgress = Marshal.ReadInt32(info)


Debug.Print(iProgress)


Case 11
If info = 0 Then
MessageBox.Show("Erreur trouvée")
Else
MessageBox.Show("Terminée avec succès")
End If
End Select


Return 1


End Function

------------------------------------------------------------------->8
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
c'est pas très clair ton truc:

CopyMemory VarPtr(progress), Info , 4

c'est pas la valeur de progress qui sera changée, mais une donnée
temporaire qui contient l'adresse de progress et sera supprimée après
l'instruction.





apparemment c'est Info qui est un pointeur.

essayes ça, mais c'est pas garanti, étant donné que je ne connais pas net



Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As int32)



Public Function chkdsk_Callback(ByVal Command As Long, ByVal Action As Long, ByVal Info As Long) As Byte



Dim progress as Long



CopyMemory progress, ByVal Info , 4



MaProgressbar.Value = progress



ChkdskCallback = 1



End Sub




Daniel
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Merci,
Mais j'ai simplifier de mémoire une partie de la fonction à traduire mais les ByVal y sont déjà et en .net CopyMemory provoque une erreur d'accès à la mémoire.

C'est ce code http://www.vbfrance.com/code.aspx?id=8449 que j'ai repris et j'essais de l'adapter en .net mais le CopyMemory me pose problème et je ne comprend pas trop la classe Marshals qui doit permettre ce que fait CopyMemory