JAVA 调用OCX的问题在线等,急~先给100分不够的可以加
发布网友
发布时间:2022-05-05 09:43
我来回答
共2个回答
热心网友
时间:2022-06-27 07:19
我之前用过jni和jna框架,这里有段我写的jni例子,你参考下:
------------------------------------------------------------------------
1.java文件:HelloWorld.java
public native void sayHello();
public static void main(String[] args){
System.loadLibrary("HelloWorld");
new HelloWorld().sayHello();
}
}
2.编译:javac HelloWorld.java
3.生成头文件:javah HelloWorld,注意应从java_home中拷贝jni.h和jni_md.h到当前目录中
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4.编写C代码:HelloWorld.c
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv * j, jobject jo)
{
printf("HelloWorld!");
}
5.编译
gcc -shared -o libHelloWorld.so HelloWorld.c
6.运行
java HelloWorld
注意,要将libHelloWorld.so放在LD_LIBRARY_PATH中。
public class UnsatisfiedLinkErrorextends LinkageError当 Java 虚拟机无法找到声明为 native 的方法的适当本地语言定义时,抛出该错误。
nm libHelloWorld.so | grep Java查看so中的相关函数。
--------------------------------------------------------------
我之前公司的有些情况是这样:
1、页面上调用控件向COM串口发送数据,这个是js实现的,在html的body中有个object的属性可以指定所用的控件,然后js直接方法名调用就可以。
2、在服务器端,使用的是jna调用本地的so库文件,在windows下就是dll文件。如上面的小例子,如果用jni需要额外引入个jna.jar包
3.以下是一个jna的小例子
import com.sun.jna.Library;import com.sun.jna.Native;
public class XXXJNA {
public interface XXXLib extends Library{
//调用linux下面的so文件
XXXLib INSTANCE = (XXXLib) Native.loadLibrary("example",XXXLib.class);
int Open(int number);
}
public int Open(int number){
return XXXLib.INSTANCE.Open(number);
}
public static void main(String[] args) {
try{
XXXJNA xJNA = new XXXJNA();
xJNA.Open(0);
}catch(Exception e){
e.printStackTrace();
}
}
}
jna调用方便,只要把相应的库文件放到指定目录即可(win中放在path下面,linux下放在
LD_LIBRARY_PATH下面),然后用上面的模板模仿即可。追问请问可以加你QQ聊吗?我有个地方不是很懂...我搭建起来了可是报了一个错:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'CreateFPCacheDB': 找不到指定的程序。
请问该如何解决啊??CreateFPCacheDB是OCX里面的方法,JNA是3.5.1的版本
热心网友
时间:2022-06-27 07:19
研究一下这个问题。