Invoke the Beep Windows API call:
try{ xFunction f=new xFunction("kernel32", "int Beep(int,int)"); f.invoke(new Argument(1770),new Argument(100)); } catch(xFunctionException e){...}
Consider the following external function:
struct Point{int x,y;}; __declspec(dllexport) int* __stdcall func(int* a, struct Point* b){ b->x=1; *a=2; int* arr=new int[100]; return arr; }
Its call from a Java program would look as follows:
public class Point extends Structure{ int x,; int y; public String defineLayout(){return "int x, int y";} } . . . try { xFunction f=new xFunction("somedll", "int* _func@8(int*, Point*)"); Point p=new Point(); p.x=10; p.y=20; Pointer arg1= Pointer.create("int*"); Pointer arg2=Pointer.createPointerTo(p); Pointer result=(Pointer)(f.invoke(arg1,arg2)); if(((Integer)arg1.deref()).intValue()!=2) throw new Error(); p=(Point)arg2.deref(); if(p.x!=1) throw new Error(); } catch( ...
"C":
__declspec(dllexport) void __stdcall func(char** str1, char* str2){ str2[0]='a'; *str1="Some string"; }
"Java":
try { xFunction f=new xFunction("somedll", "void _func@8(CSTRING*,CSTRING)"); Pointer arg1=Pointer.create("CSTRING*"); Argument arg2=new Argument("A string", Argument.CSTRING); f.invoke(arg1,arg2); String str1=(String)(arg1.deref()); String str2=(String)(arg2.getValue()); if(!str1.equals("Some string")) throw new Error(); if(!str2.equals("a string")) throw new Error(); } catch (...
"C":
__declspec(dllexport) void __stdcall foo(int* ma ){ printf("Multiarray: ={{{%d,%d},{%d,%d}}}\n", *ma,*(ma+1), *(ma+1*2+0), *(ma+1*2+1)); *(ma+1*2+1)=4; }
"Java":
try { xFunction foo=new xFunction("SOMEDLL", "void _foo@4(int*)"); int[][][] arr=new int[][][]{{{1,2},{3,4}}}; Pointer arg=(Pointer)Argument.create("int*",arr); foo.invoke(arg); int[][][] arr3 = (int[][][])arg.createArray(new int[]{1,2,2}); if((arr3[0][0][0]!=1)||(arr3[0][0][1]!=2)|| (arr3[0][1][0]!=3)||(arr3[0][1][1]!=4)) throw new Error(); } catch(...