public void memoryMove(long src, long dest, long len) { final Pointer srcPointer = new Pointer(src); final Pointer destPointer = new Pointer(dest); if (memmove != null) memmove.invoke(Pointer.class, new Object[] {destPointer, srcPointer, new NativeLong(len)}); else if (bcopy != null) bcopy.invokeVoid(new Object[] {srcPointer, destPointer, new NativeLong(len)}); else { if (src > dest) for (long n = 0; n < len; n++) destPointer.setByte(n, srcPointer.getByte(n)); else for (long n = len - 1; n >= 0; n--) destPointer.setByte(n, srcPointer.getByte(n)); } }
public void testInterceptLastError() { if (!Platform.isWindows()) { return; } NativeLibrary kernel32 = (NativeLibrary) NativeLibrary.getInstance("kernel32", W32APIOptions.DEFAULT_OPTIONS); Function get = kernel32.getFunction("GetLastError"); Function set = kernel32.getFunction("SetLastError"); assertEquals("SetLastError should not be customized", Function.class, set.getClass()); assertTrue( "GetLastError should be a Function", Function.class.isAssignableFrom(get.getClass())); assertTrue("GetLastError should be a customized Function", get.getClass() != Function.class); final int EXPECTED = 42; set.invokeVoid(new Object[] {new Integer(EXPECTED)}); assertEquals("Wrong error", EXPECTED, get.invokeInt(null)); }