1

我的 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;
}

非常感谢,马里奥。

4

1 回答 1

0

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

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

所以JNA没问题。

于 2013-07-31T11:30:40.780 回答