schmuttering 发表于 2010-1-7 13:39

求精通C语言高手解决问题

本帖最后由 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;
        } TD3;
typedef TD3 **TD3Hdl;
typedef struct {
        int32_t dimSize;
        double n;
        } TD4;
typedef TD4 **TD4Hdl;
typedef struct {
        TD3Hdl elt1;
        TD4Hdl elt2;
        } TD2;
typedef struct {
        int32_t dimSize;
        TD2 elt;
        } 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;
}
public class TD2Hdl extends Structure{
public TD3Hdl elt1;
public TD4Hdl elt2;
}
public class TD3Hdl extends Structure{
public int dimSize;
public double M[] = new double;
}
public class TD4Hdl extends Structure{
public int dimSize;
public double n[] = new double;
}

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.elt1.M;
double n = Kennlinie.elt.elt2.n;
System.out.printf("M=",m);
System.out.printf("\n");
System.out.printf("n=",n);
}
}
现在我的输出结果是空的,就是说数据库的进不去,请求高手帮我编一下这个程序,应该怎么转进去,然后读出来.另外,希望有具体的代码,我是初学者,很不会编程,谢谢,麻烦大家了
页: [1]
查看完整版本: 求精通C语言高手解决问题