
void CtestOCXCtrl::SetCallBack(VARIANT &cbFun)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if (cbFun.vt == VT_DISPATCH)
m_spCallbackIntercomFunc = cbFun.pdispVal
}
我之前用过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.Libraryimport 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下面),然后用上面的模板模仿即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)