你可以把char*转换成char数组,这样在JNI中就有对应的数据类型jcharArray了
以下是c程序:
JNIEXPORT void JNICALL 
Java_CharArray_sumArray(JNIEnv *env, jobject obj, jcharArray arr)
{
  jsize len = (*env)->GetArrayLength(env, arr);
  int i, sum = 0;
  jchar *body = (*env)->GetCharArrayElements(env, arr, 0);
...
}
这样你就可以操作char*类型的变量body了

解决方案 »

  1.   

    我在java程序中定义了一个action(event evt,Object whatAction)方法和对应的一个button,只有当鼠标点击这个button后才能激活I2C_Link()方法.如果使用JNI方法的话C程序中怎样通过鼠标点击事件去调用I2C_Link()方法?
      

  2.   

    如果写成种结构:
    ...
    public native void I2C_Link(???);
    myButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    I2C_Link(???)
    }
    });
    鼠标点击按钮不就调用I2C_Link()方法了吗?
      

  3.   

    我已经成功的编绎出了我自己用C++程序编的使用JNI方法的DLL了,在Java里也可以用这个DLL了,但是放在这个applet程序中,一调用鼠标点击事件执行代码会出现以下错误:
    Exception occurred during event dispatching:
    java.lang.UnsatisfiedLinkError: S2I_Link
    at cheess.demo.S2I_Link(Native Method)
    at cheess.demo$1.actionPerformed(demo.java:41)
    at java.awt.Button.processActionEvent(Button.java:329)
    at java.awt.Button.processEvent(Button.java:302)
    at java.awt.Component.dispatchEventImpl(Component.java:2595)
    at java.awt.Component.dispatchEvent(Component.java:2499)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:319)
    at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:84)
    这是怎么回事???
      

  4.   

    对了,我把public native void I2C_Link(???)改成了public native long S2I_Link(???),因为在原DLL中这个方法的返回值是long型的.
      

  5.   

    这个问题已经与调用dll无关了,因为applet是运行在能够运行在因特网上任何浏览器上的程序,他的安全管理十分严格.想象一下,如果有个网页嵌入了你的applet,某人在浏览网页时这个applet却偷偷的把他存在电脑上的信用卡密码文件打开,然后传到你的机器上.....嘿嘿,你就乐吧你!因此,applet一旦运行他的安全管理器就会阻止你对任何本地文件的操作