JNA调用DLL,SO文件
大约 2 分钟
提示
JNA调用DLL,SO文件
1. c头文件
#pragma once
#ifndef STEPLOCAL_H_
#define STEPLOCAL_H_
#define MAX_INPUT_LINE_NUM 100
#define MAX_INPUT_CHAR_NUM_PER_LINE 100
#define MAX_OUTPUT_LINE_NUM 200
#define MAX_OUTPUT_CHAR_NUM_PER_LINE 1000
#define STEP_STRING_NUM 20
#define MAX_OPERATION_STRING_NUM 10
#define MAX_COMPOND_NAME 100
#define MAX_STEP 100
typedef struct {
char input[MAX_INPUT_LINE_NUM][MAX_INPUT_CHAR_NUM_PER_LINE];
char output[MAX_OUTPUT_LINE_NUM][MAX_OUTPUT_CHAR_NUM_PER_LINE];
int perror;
} StepInOut;
#define SIZEOF_STEP_IN_OUT sizeof(StepInOut)
#endif
int calca_step(StepInOut* stepinout, int calc_num,char* logPath);
2. 生成java文件
java -jar .\jnaerator-0.13-SNAPSHOT-shaded.jar -library StepLocal .\steplocal.h -o . -mode Directory -runtime JNA -beautifyNames -forceStringSignatures -limitComments
-library ${Java对象名称}
-o . 当前目录输出
-runtime JNA 使用JNA方式生成
-beautifyNames 方法名优化
-limitComments 删除无用注释
-forceStringSignatures 使用char* 转string
文件: jnaerator
3. 生成的文件
package steplocal;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import java.util.Arrays;
import java.util.List;
/**
* This file was autogenerated by <a href="http://jnaerator.googlecode.com/">JNAerator</a>,<br>
* a tool written by <a href="http://ochafik.com/">Olivier Chafik</a> that <a href="http://code.google.com/p/jnaerator/wiki/CreditsAndLicense">uses a few opensource projects.</a>.<br>
* For help, please visit <a href="http://nativelibs4java.googlecode.com/">NativeLibs4Java</a> , <a href="http://rococoa.dev.java.net/">Rococoa</a>, or <a href="http://jna.dev.java.net/">JNA</a>.
*/
public class StepInOut extends Structure {
/** C type : char[100][100] */
public byte[] input = new byte[((100) * (100))];
/** C type : char[200][1000] */
public byte[] output = new byte[((200) * (1000))];
public int perror;
public StepInOut() {
super();
}
protected List<? > getFieldOrder() {
return Arrays.asList("input", "output", "perror");
}
/**
* @param input C type : char[100][100]<br>
* @param output C type : char[200][1000]
*/
public StepInOut(byte input[], byte output[], int perror) {
super();
if ((input.length != this.input.length))
throw new IllegalArgumentException("Wrong array size !");
this.input = input;
if ((output.length != this.output.length))
throw new IllegalArgumentException("Wrong array size !");
this.output = output;
this.perror = perror;
}
public StepInOut(Pointer peer) {
super(peer);
}
public static class ByReference extends StepInOut implements Structure.ByReference {
};
public static class ByValue extends StepInOut implements Structure.ByValue {
};
}
package steplocal;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Pointer;
/**
* JNA Wrapper for library <b>StepLocal</b><br>
* This file was autogenerated by <a href="http://jnaerator.googlecode.com/">JNAerator</a>,<br>
* a tool written by <a href="http://ochafik.com/">Olivier Chafik</a> that <a href="http://code.google.com/p/jnaerator/wiki/CreditsAndLicense">uses a few opensource projects.</a>.<br>
* For help, please visit <a href="http://nativelibs4java.googlecode.com/">NativeLibs4Java</a> , <a href="http://rococoa.dev.java.net/">Rococoa</a>, or <a href="http://jna.dev.java.net/">JNA</a>.
*/
public interface StepLocalLibrary extends Library {
public static final String JNA_LIBRARY_NAME = "StepLocal";
public static final NativeLibrary JNA_NATIVE_LIB = NativeLibrary.getInstance(StepLocalLibrary.JNA_LIBRARY_NAME);
public static final StepLocalLibrary INSTANCE = (StepLocalLibrary)Native.loadLibrary(StepLocalLibrary.JNA_LIBRARY_NAME, StepLocalLibrary.class);
public static final int MAX_INPUT_LINE_NUM = (int)100;
public static final int MAX_INPUT_CHAR_NUM_PER_LINE = (int)100;
public static final int MAX_OUTPUT_LINE_NUM = (int)200;
public static final int MAX_OUTPUT_CHAR_NUM_PER_LINE = (int)1000;
public static final int STEP_STRING_NUM = (int)20;
public static final int MAX_OPERATION_STRING_NUM = (int)10;
public static final int MAX_COMPOND_NAME = (int)100;
public static final int MAX_STEP = (int)100;
/**
* Original signature : <code>int calca_step(StepInOut*, int, char*)</code><br>
* @deprecated use the safer methods {@link #calcaStep(steplocal.StepInOut, int, java.lang.String)} and {@link #calcaStep(steplocal.StepInOut, int, com.sun.jna.Pointer)} instead
*/
@Deprecated
int calcaStep(StepInOut stepinout, int calc_num, Pointer logPath);
/** Original signature : <code>int calca_step(StepInOut*, int, char*)</code> */
int calcaStep(StepInOut stepinout, int calc_num, String logPath);
}