I used JNA to map the plugin functions and variables.
This is my plugin class:
This is my plugin class:
This is winampDSPHeader class:code:
public interface dsp_stereo extends Library{
dsp_stereo INSTANCE = (dsp_stereo) Native.loadLibrary("dsp_stereo", dsp_stereo.class);
public winampDSPHeader winampDSPGetHeader2();
}
This is winampDSPModule class:code:
public class winampDSPHeader extends Structure{
public int version;
public String description;
public static interface getModuleFunc extends Callback{
winampDSPModule invoke(int i);
}
public getModuleFunc getModule;
@Override
protected List getFieldOrder() {
return Arrays.asList(new String[] { "version", "description", "getModule"});
}
}
This is my main class:code:
public class winampDSPModule extends Structure{
public String description;
public HWND hwndParent;
public HINSTANCE hDllInstance;
public static interface configFunc extends Callback{
void invoke(winampDSPModule this_mod);
}
public configFunc Config;
public static interface initFunc extends Callback{
int invoke(winampDSPModule this_mod);
}
public initFunc Init;
public static interface modifySamplesFunc extends Callback{
int invoke(winampDSPModule this_mod, short[] samples, int numsamples, int bps, int nch, int srate);
}
public modifySamplesFunc ModifySamples;
public static interface quitFunc extends Callback{
void invoke(winampDSPModule this_mod);
}
public quitFunc Quit;
public Pointer userData;
@Override
protected List getFieldOrder() {
return Arrays.asList(new String[] { "description", "hwndParent", "hDllInstance", "Config", "Init", "ModifySamples", "Quit", "userData"});
}
public winampDSPModule(){
}
}
The plugin appeared when i ran the code. But it is not responding when i clicked on it. Do i missed something on my code?code:
public class Test{
public static void main(String[] args){
JFrame f = new JFrame();
f.setTitle("asd");
f.setVisible(true);
f.setSize(300, 400);
dsp_stereo lib = dsp_stereo.INSTANCE;
winampDSPHeader header = lib.winampDSPGetHeader2();
winampDSPModule module = header.getModule.invoke(0);
module.hwndParent = null;
module.hDllInstance = Kernel32.INSTANCE.GetModuleHandle("dsp_stereo");
module.Init.invoke(module);
}
}
Comment