DLL是硬件接口(在本地可调用),已封装打开串口以及操作硬件的程序,将DLL放在服务器上,现在想从服务器调到客户端来操作硬件,也就是远程可调用打开串口等操作,有什么办法可行?
DLL里的串口函数:
function Java_com_gsxunjiansys_CommDLL_BeanDLL_termcommopen(PEnv: PJNIEnv;
Obj: JObject;PortI: JString):Jint;
Var
JVM: TJNIEnv;
Port:String;
Begin
JVM := TJNIEnv.Create(PEnv);
Port:=JVM.UnicodeJStringToString(PortI);
JVM.Free; if Term_CommOpen(pchar(Port)) then
Begin
//Application.MessageBox(pchar(Port), '提示', MB_IconInformation);
result:=1;
End;End;
DLL里的串口函数:
function Java_com_gsxunjiansys_CommDLL_BeanDLL_termcommopen(PEnv: PJNIEnv;
Obj: JObject;PortI: JString):Jint;
Var
JVM: TJNIEnv;
Port:String;
Begin
JVM := TJNIEnv.Create(PEnv);
Port:=JVM.UnicodeJStringToString(PortI);
JVM.Free; if Term_CommOpen(pchar(Port)) then
Begin
//Application.MessageBox(pchar(Port), '提示', MB_IconInformation);
result:=1;
End;End;
2.用javah生成和主程序对应的头文件
3.修改java的本地安全策略,使得有权限访问本地的动态链接库
目前采用OCX方式。
希望提供比较好的方法。
public class RTSTest { static {
System.loadLibrary("dll");
} public native void setRTS(boolean value); public native boolean getRTS(); /**
* @param args
*/
public static void main(String[] args) {
RTSTest rtsObj = new RTSTest();
System.out.println("In Java program set RTS = true");
rtsObj.setRTS(true);
System.out.println("return RTS's value changed in C++\nRTS.value = "
+ rtsObj.getRTS());
}
}
RTSTest.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class RTSTest */#ifndef _Included_RTSTest
#define _Included_RTSTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: RTSTest
* Method: setRTS
* Signature: (Z)V
*/
JNIEXPORT void JNICALL Java_RTSTest_setRTS
(JNIEnv *, jobject, jboolean);/*
* Class: RTSTest
* Method: getRTS
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_RTSTest_getRTS
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif
java中输出的结果:
In Java program set RTS = true
return RTS's value changed in C++
RTS.value = true
http://www.programmerstudy.com/programme/java/20084/97.html