[.net2] CopyMemory

Résolu
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 1 janv. 2006 à 23:55
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 2 janv. 2006 à 02:54
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

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 janv. 2006 à 01:42
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
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
2 janv. 2006 à 02:54
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
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 janv. 2006 à 01:00
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
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
2 janv. 2006 à 01:18
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
0
Rejoignez-nous