还是关于Dll文件调用的问题(我是菜鸟,希望各位不要扔砖)

AlexGL 2005-04-18 01:08:14
我看过许多JNI和调用Dll文件方面的帖子,大多是dll文件是作者自己写的,然后利用JAVA调用。
我现在遇到的问题是:第三方提供了一个DLL文件和一个VB/VC调用的例子,方法名都有了。
但是我该怎么老是调用失败呢?这个dll文件已经注册过了。。。

public class mongategsm
{
public native int fnInitModem(int comx);



public native int MongateInitModem(String password);
public native int MongateSendSms(int PortNo,String sn,String mobi,String note);
public native int MongateGetSendCount(int PortNo);
public native int MongateGetRecvCount(int PortNo);
public native int MongateClearSendBuff(int PortNo);
public native int MongateClearRecvBuff(int PortNo);
public static native String[] MongateGetSms(int PortNo);
public native int MongateSetReceive(int PortNo);
public native int MongateGetStatus(int PortNo);
public native int MongateGetPortMax();
public native int MongateCloseModem(int PortNo);

static
{
System.loadLibrary("MonDem");
}

public static void main(String args[])
{
mongategsm tmp=new mongategsm();

if(tmp==null)
{
System.out.println("=========error");
}
if(tmp!=null)
{
System.out.println("=========success");

}
}
}


各位兄弟有更好的方法吗?
...全文
169 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
晕啊。。。还要自己写C++啊。。郁闷。。没有经验啊。。。
飞行的兔子 2005-04-18
  • 打赏
  • 举报
回复
你可以把刚才那个dll文件作为中间dll文件,在这个中间dll文件中调用别人写好的dll文件!然后在java中调用这个中间dll文件啊!
至于怎么在刚才那个.c文件中调用另外一个dll文件,这是c/c++中的语法规则,
kingfish 2005-04-18
  • 打赏
  • 举报
回复
to zhutouzip: 2星,该散分了吧,呵呵
kingfish 2005-04-18
  • 打赏
  • 举报
回复
//第三方提供了一个DLL文件和一个VB/VC调用的例子,方法名都有了

这个dll不能在java中直接用, 你需要写个jni的dll, 这个dll中调用第三方dll
飞行的兔子 2005-04-18
  • 打赏
  • 举报
回复
最后运行:java HelloWorld
看到了什么结果么!
注意dll文件的摆放位置,你可以放入和class文件的同一个目录,或者放入c:\windows\system32目录下,或者放在系统可以搜索到的路径如classpath中!
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
别人在dll文件中写好了方法,然后我想用JAVA调用它啊。。。
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
晕。。。老大,我还是不太明白,那个我要调用的dll文件是别人写好的啊。。。。
飞行的兔子 2005-04-18
  • 打赏
  • 举报
回复
第一步:
用最简单的例子举例:写一个类:
class HelloWorld {
public native void displayHelloWorld();//定义本地方法

static {
System.loadLibrary("hello");//调入本地库
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
这个类和普通的类文件没有什么区别,但要看到还是有些细微区别!你看出了么?
然后编译javac HelloWorld.java 这时生成了HelloWorld.class文件
接着javah -jni HelloWorld 生成HelloWorld.h头文件

第二步:编写C文件并编译成DLL
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
#include <windows.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");//在这里实现java类中定义的方法
MessageBeep(0);//调用到win本地,会发一声响
return;
}
文件名随便取,但要以.c为后缀!
然后用c或者c++的工具编译成dll文件,用vc或者其它工具生成!(不知道你的c是不是很好?)

AlexGL 2005-04-18
  • 打赏
  • 举报
回复
谢谢,谢谢。。。感激!!!!
飞行的兔子 2005-04-18
  • 打赏
  • 举报
回复
等等,我在帮你写!
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
干脆你说详细点,要我怎么做,是不是要再做一个DLL文件,调用已经有的文件,然后再做JAVA文件调用我后写的这个DLL文件???
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
老大。。。能不能不让我看那些英文啊。。有没有中文的啊。。。我已经被那些看过的帖子弄的头晕啊。。。
飞行的兔子 2005-04-18
  • 打赏
  • 举报
回复
如果要仔细研究,看看jdk文档中的jni板块,里面讲的很详细!
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
那我现在该怎么做??晕。。。
AlexGL 2005-04-18
  • 打赏
  • 举报
回复
啊??什么规定啊??能提示的详细点吗?
飞行的兔子 2005-04-18
  • 打赏
  • 举报
回复
你的dll文件要符合jni中的外部类文件的规定,不是随便一个类文件都可以用的!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧