其实我已经按照网上很多文章的写法写了代码,但总是编译报错!代码如下GetIdealFaxAction.java:
package cn.wh.company.fax;public class GetIdealFaxAction {
static {
System.loadLibrary("idealfax");//这个idealfax.dll文件存放在C:\j2sdk1.4.2_11\bin下面,并在path里面写上了C:\j2sdk1.4.2_11\bin;
} public native static boolean Init();
public native static int Channel();
public native static boolean Send(String number,String file);}调用这个程序的代码:
package cn.wh.company.fax;import cn.wh.company.common.web.BaseAction;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestAction extends BaseAction {
public ActionForward execute2(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
GetIdealFaxAction getfax = new GetIdealFaxAction();//走到这一步就开始报错了,就算不用这一句,直接用GetIdealFaxAction.init();也报错! return mapping.findForward("fax");
}
}程序走到GetIdealFaxAction getfax = new GetIdealFaxAction()就开始报错了,就算不用这一句,直接用GetIdealFaxAction.init();也报错!不知道怎么调用c里面的init()这个函数,快郁闷死了,C++生成的dll文件应该没有什么问题,编译都通过!(idealfax.dll文件在这个java目录下面也都放了)我用debug查看的错误信息是UnsatisfiedLinkError,不知道什么原因!
高手解决下啊,这是本周的工作任务,一完成马上结贴送分!
package cn.wh.company.fax;public class GetIdealFaxAction {
static {
System.loadLibrary("idealfax");//这个idealfax.dll文件存放在C:\j2sdk1.4.2_11\bin下面,并在path里面写上了C:\j2sdk1.4.2_11\bin;
} public native static boolean Init();
public native static int Channel();
public native static boolean Send(String number,String file);}调用这个程序的代码:
package cn.wh.company.fax;import cn.wh.company.common.web.BaseAction;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestAction extends BaseAction {
public ActionForward execute2(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
GetIdealFaxAction getfax = new GetIdealFaxAction();//走到这一步就开始报错了,就算不用这一句,直接用GetIdealFaxAction.init();也报错! return mapping.findForward("fax");
}
}程序走到GetIdealFaxAction getfax = new GetIdealFaxAction()就开始报错了,就算不用这一句,直接用GetIdealFaxAction.init();也报错!不知道怎么调用c里面的init()这个函数,快郁闷死了,C++生成的dll文件应该没有什么问题,编译都通过!(idealfax.dll文件在这个java目录下面也都放了)我用debug查看的错误信息是UnsatisfiedLinkError,不知道什么原因!
高手解决下啊,这是本周的工作任务,一完成马上结贴送分!
如果你的web程序需要调用动态;我建议你做好先写一个java类测试一下。
首先你得保证idealfax.dll没有问题;你可以写一个C++测试程序调用idealfax.dll这个dll如果测试没有问题,则说明idealfax.dll没有错误。
//请把idealfax.dll放到resin,或者java.libpath目录下。只要jvm系统可以找到对应的idealfax.dll就可以了。
//linux版 把idealfax.so,libstdc++.so.5放到%JAVA_HOME%/jre/lib/i386下就可以了。
一般做法;如果你的web工程放在resin下运行就把idealfax动态库放在resin根目录下;
如果放在tomcat下运行就放到%TOMCAT_HOME%/bin目录下。
如果你是使用eclipse写一个java测试程序来测试的话;可以把idealfax动态库放到eclipse根目录下。
关于idealfax.dll的生成是在C:\j2sdk1.4.2_11\bin下面生成的,我将我的GetIdealFaxAction.java直接放到C:\j2sdk1.4.2_11\bin下面使用javac,javah生成.h文件然后用vc生成dll文件,这样我觉得有错,因为我的GetIdealFaxAction.java是有包的(package cn.wh.company.fax;),似乎不能直接copy到C:\j2sdk1.4.2_11\bin下面去生成,看这个是不是问题的所在?下午我会修改一下,就在工程目录下面使用JAVAH,看能否成功!请高手继续关注~~~