|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 schmuttering 于 2010-1-9 12:28 编辑
我要用Java调用dll的数据库,发现interface里面的结构很复杂,C语言头文件里面的Struct太多指针了,好像是用到了指针的指针的指针这种复杂方式。我在Java里面完全不知道怎么转换到正确的内存块上去
GM_Lib.h的内容是这样的:
#include "extcode.h"
#pragma pack(push)
#pragma pack(1)
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
int32_t dimSize;
double M[1];
} TD3;
typedef TD3 **TD3Hdl;
typedef struct {
int32_t dimSize;
double n[1];
} TD4;
typedef TD4 **TD4Hdl;
typedef struct {
TD3Hdl elt1;
TD4Hdl elt2;
} TD2;
typedef struct {
int32_t dimSize;
TD2 elt[1];
} TD1;
typedef TD1 **TD1Hdl;
void __stdcall Interface_GM_01(double Luftspaltlaenge, double Motorlaenge,
double Polueberdeckung, double Ankerwindungszahl, double Erregerjoch,
double Nutbreite, double Erregerpolbreite, TD1Hdl *Kennlinie);
long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);
#ifdef __cplusplus
} // extern "C"
#endif
#pragma pack(pop)
下面是JAVA调用dll的程序
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Structure;
public class TD1Hdl extends Structure{
public int dimSize;
public TD2Hdl elt[] = new TD2Hdl[1];
}
public class TD2Hdl extends Structure{
public TD3Hdl elt1;
public TD4Hdl elt2;
}
public class TD3Hdl extends Structure{
public int dimSize;
public double M[] = new double[1];
}
public class TD4Hdl extends Structure{
public int dimSize;
public double n[] = new double[1];
}
public class ReadGmLib {
static TD1Hdl Kennlinie = new TD1Hdl();
public interface GM_Lib extends Library {
GM_Lib INSTANCE = (GM_Lib) Native.loadLibrary("GM_Lib", GM_Lib.class);
public void Interface_GM_01(double Luftspaltlaenge, double Motorlaenge,
double Polueberdeckung, double Ankerwindungszahl,
double Erregerjoch, double Nutbreite, double Erregerpolbreite,
TD1Hdl Kennlinie);
}
public static void main(String[] args) {
double Luftspaltlaenge = 0;
double Motorlaenge = 0;
double Polueberdeckung = 0;
double Ankerwindungszahl = 0;
double Erregerjoch = 0;
double Nutbreite = 0;
double Erregerpolbreite = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input 7 parameters:");
try {
Luftspaltlaenge = Double.parseDouble(br.readLine());
Motorlaenge = Double.parseDouble(br.readLine());
Polueberdeckung = Double.parseDouble(br.readLine());
Ankerwindungszahl = Double.parseDouble(br.readLine());
Erregerjoch = Double.parseDouble(br.readLine());
Nutbreite = Double.parseDouble(br.readLine());
Erregerpolbreite = Double.parseDouble(br.readLine());
} catch (IOException e) {
System.out.println("error!");
}
GM_Lib.INSTANCE.Interface_GM_01(Luftspaltlaenge, Motorlaenge,
Polueberdeckung, Ankerwindungszahl, Erregerjoch, Nutbreite,
Erregerpolbreite, Kennlinie);
double m = Kennlinie.elt[0].elt1.M[0];
double n = Kennlinie.elt[0].elt2.n[0];
System.out.printf("M=",m);
System.out.printf("\n");
System.out.printf("n=",n);
}
}
现在我的输出结果是空的,就是说数据库的进不去,请求高手帮我编一下这个程序,应该怎么转进去,然后读出来.另外,希望有具体的代码,我是初学者,很不会编程,谢谢,麻烦大家了 |
|