memcpy (msvcrt)
Last changed: -90.187.255.169

.
Summary
Copies count bytes of src to dest. If the source and destination overlap, the behavior of memcpy is undefined. Use memmove to handle overlapping regions.

C# Signature:

[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);

VB.NET Signature:

    <DllImport("msvcrt.dll", EntryPoint:="memcpy", CallingConvention:=CallingConvention.Cdecl)> _
    Public Shared Sub CopyMemory(ByVal dest As IntPtr, ByVal src As IntPtr, ByVal count As Integer)
    End Sub

VB Signature:

Declare Function memcpy Lib "msvcrt.dll" (TODO) As TODO

Return Value:

The value of dest.

User-Defined Types:

None.

Alternative Managed API:

System.Buffer.BlockCopy, Marshal.Copy and Array.Copy provide similar services, but require one or two managed arrays instead of pointers.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code VB.Net:

'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

Sample Code C#:

    public static Bitmap Clone(Bitmap src)
    {
        // get source image size
        int width = src.Width;
        int height = src.Height;

        // lock source bitmap data
        BitmapData srcData = src.LockBits(
        new Rectangle(0, 0, width, height),
        ImageLockMode.ReadWrite, src.PixelFormat);

        // create new image
        Bitmap dst = new Bitmap(width, height, src.PixelFormat);

        // lock destination bitmap data
        BitmapData dstData = dst.LockBits(
        new Rectangle(0, 0, width, height),
        ImageLockMode.ReadWrite, dst.PixelFormat);

        memcpy(dstData.Scan0, srcData.Scan0, new UIntPtr((uint)height * (uint)srcData.Stride));

        // unlock both images
        dst.UnlockBits(dstData);
        src.UnlockBits(srcData);        

        return dst;
    }

Documentation
memcpy on MSDN