Java JNA对C ++ DLL的调用是从Netbeans开始的,但是从命令行调用.jar时则不行

时间:2013-07-25 15:52:40

标签: java netbeans-7 jna

我的Java程序使用JNA调用用C ++编译的DLL。 DLL从Java接收一些intdouble值作为参数。 从Netbeans运行时它工作正常,但是当我从命令行调用Java .jar程序时,C ++程序接收垃圾:即接收到等于1的int作为64562352.当程序重复运行时从Java发送int 1 ,C ++ dll收到不同的数字:65631824,66011704,....

我使用Windows 7,Netbeans 7.0.1,Java 1.7.0_01,Microsoft Visual C ++ 2008,JNA 3.3.0(b0)。

相关代码是:

爪哇:

public interface ClibLP extends Library {
    enter code here`public double vectorC (int tipoprob, int nvar, 
                                           double  numero);            
} 

public class LlamadorLP {    
    public static void main(String[] args) {                            
        int tipoprob = 1;
        int nvar = 1000;
        double numero = 1.5;
        double total = clib.vectorC(tipoprob, nvar, numero);     
}

C ++:

extern "C" __declspec(dllexport) double  vectorC (int tipoprob, int nvar, 
                                                  double numero);

double  vectorC(int tipoprob, int nvar, double numero) {        
  printf("Estoy en la función C!\n");
  printf("tipoprob=%d\n",tipoprob);
  printf("nvar=%d\n",nvar);
  printf("numero=%6.1f\n",numero);
  return total;
}

非常感谢,马里奥。

1 个答案:

答案 0 :(得分:0)

我发现我犯了一个愚蠢的Netbeans错误,所以JNA调用没有问题。

从Netbeans运行时,我选择了正确的类来运行。从命令行运行时,.jar使用另一个类作为主类,因此结果是不可预测的。总之,dll是由不同的类调用的。 我使用Netbeans项目属性设置了正确的主类,一切都很顺利:结果,运行形式Netbeans和命令行都是相同的。

所以JNA没问题。