diff --git a/CefSharp.Wpf/Rendering/AbstractRenderHandler.cs b/CefSharp.Wpf/Rendering/AbstractRenderHandler.cs index 5adbb1b9ac..12ab0b43ac 100644 --- a/CefSharp.Wpf/Rendering/AbstractRenderHandler.cs +++ b/CefSharp.Wpf/Rendering/AbstractRenderHandler.cs @@ -20,8 +20,9 @@ namespace CefSharp.Wpf.Rendering /// public abstract class AbstractRenderHandler : IDisposable, IRenderHandler { - [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)] - protected static extern void CopyMemory(IntPtr dest, IntPtr src, uint count); + // Note: In contrast to RtlMoveMemory, RtlCopyMemory requires that the buffers do not overlap. + [DllImport("kernel32.dll", EntryPoint = "RtlCopyMemory", SetLastError = false)] + protected static extern void CopyMemory(IntPtr dest, IntPtr src, UIntPtr count); internal static readonly PixelFormat PixelFormat = PixelFormats.Pbgra32; internal static int BytesPerPixel = PixelFormat.BitsPerPixel / 8; diff --git a/CefSharp.Wpf/Rendering/Experimental/IncreaseBufferInteropRenderHandler.cs b/CefSharp.Wpf/Rendering/Experimental/IncreaseBufferInteropRenderHandler.cs index d5bcab284d..0d23bc97be 100644 --- a/CefSharp.Wpf/Rendering/Experimental/IncreaseBufferInteropRenderHandler.cs +++ b/CefSharp.Wpf/Rendering/Experimental/IncreaseBufferInteropRenderHandler.cs @@ -60,7 +60,7 @@ protected override void CreateOrUpdateBitmap(bool isPopup, Rect dirtyRect, IntPt //TODO: Performance analysis to determine which is the fastest memory copy function //NativeMethodWrapper.CopyMemoryUsingHandle(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, numberOfBytes); - CopyMemory(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, (uint)numberOfBytes); + CopyMemory(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, (UIntPtr)(uint)numberOfBytes); //Take a reference to the backBufferHandle, once we're on the UI thread we need to check if it's still valid var backBufferHandle = mappedFile.SafeMemoryMappedFileHandle; diff --git a/CefSharp.Wpf/Rendering/InteropBitmapRenderHandler.cs b/CefSharp.Wpf/Rendering/InteropBitmapRenderHandler.cs index c6fbbd3d00..2801d9b206 100644 --- a/CefSharp.Wpf/Rendering/InteropBitmapRenderHandler.cs +++ b/CefSharp.Wpf/Rendering/InteropBitmapRenderHandler.cs @@ -54,7 +54,7 @@ protected override void CreateOrUpdateBitmap(bool isPopup, Rect dirtyRect, IntPt //TODO: Performance analysis to determine which is the fastest memory copy function //NativeMethodWrapper.CopyMemoryUsingHandle(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, numberOfBytes); - CopyMemory(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, (uint)numberOfBytes); + CopyMemory(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, (UIntPtr)(uint)numberOfBytes); //Take a reference to the backBufferHandle, once we're on the UI thread we need to check if it's still valid var backBufferHandle = mappedFile.SafeMemoryMappedFileHandle; diff --git a/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs b/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs index 84941e9935..d4da4e4016 100644 --- a/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs +++ b/CefSharp.Wpf/Rendering/WritableBitmapRenderHandler.cs @@ -64,7 +64,7 @@ protected override void CreateOrUpdateBitmap(bool isPopup, Rect dirtyRect, IntPt //TODO: Performance analysis to determine which is the fastest memory copy function //NativeMethodWrapper.CopyMemoryUsingHandle(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, numberOfBytes); - CopyMemory(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, (uint)numberOfBytes); + CopyMemory(viewAccessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), buffer, (UIntPtr)(uint)numberOfBytes); //Take a reference to the sourceBuffer that's used to update our WritableBitmap, //once we're on the UI thread we need to check if it's still valid