[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);
<DllImport("msvcrt.dll", EntryPoint:="memcpy", CallingConvention:=CallingConvention.StdCall)> _
Public Sub CopyMemory(ByVal dest As IntPtr, ByVal src As IntPtr, ByVal count As Integer)
End Sub
Declare Function memcpy Lib "msvcrt.dll" (TODO) As TODO
The value of dest.
None.
System.Buffer.BlockCopy, Marshal.Copy and Array.Copy provide similar services, but require one or two managed arrays instead of pointers.
None.
Please add some!
Please add some!
Prima mi creo da un vettore di caratteri una area di memoria non gestita con la stringa "Ciao"
quindi la copio in un altra area non gestita con MemCpy, e quindi la ritrasformo in un vettore
di caratteri, che posso quindi convertire in una stringa !!!
Provato e testato. Funziona.
Salute a tutti.
Andrea Casagrande
Imports System.Runtime.InteropServices
Sub Main()
Dim managedArray1 As Char() = ("Ciao").ToCharArray
Dim size As Integer = Marshal.SizeOf(managedArray1(0)) * managedArray1.Length
Dim pnt1 As IntPtr = Marshal.AllocHGlobal(size)
Dim pnt2 As IntPtr = Marshal.AllocHGlobal(size)
Dim managedArray2(managedArray1.Length - 1) As Char
Try
Marshal.Copy(managedArray1, 0, pnt1, managedArray1.Length)
'----MemCpy
CopyMemory(pnt2, pnt1, size * 2)
'----
Marshal.Copy(pnt2, managedArray2, 0, managedArray2.Length)
Finally
Marshal.FreeHGlobal(pnt1)
Marshal.FreeHGlobal(pnt2)
End Try
Dim value As String = New String(managedArray2)
Console.WriteLine(">>" + value + "<<")
End Sub