我的Java程序使用JNA调用用C ++编译的DLL。 DLL从Java接收一些int
和double
值作为参数。
从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;
}
非常感谢,马里奥。
答案 0 :(得分:0)
我发现我犯了一个愚蠢的Netbeans错误,所以JNA调用没有问题。
从Netbeans运行时,我选择了正确的类来运行。从命令行运行时,.jar使用另一个类作为主类,因此结果是不可预测的。总之,dll是由不同的类调用的。 我使用Netbeans项目属性设置了正确的主类,一切都很顺利:结果,运行形式Netbeans和命令行都是相同的。
所以JNA没问题。