孤星如晨 2018-08-17 13:00 采纳率: 33.3%
浏览 609
已采纳

java如何调c++ clr类库项目的dll中的方法

本人小白,建了一个c++ clr项目图片说明
里面代码这样写的(定义一个test方法):
图片说明
然后编译成dll,然后java调用,java代码:
图片说明
可以输出load testDll.dll success,也就是调用dll成功,但是我想调用里面的test方法:
public static void main(String[] args) {
//System.out.println(Dll.INSTANCE.runTest("love"));
System.out.println(System.getProperty("java.version"));//输出当前jdk版本号
System.out.println(System.getProperty("sun.arch.data.model"));//输出当前jdk所用平台
WordUtils w=new WordUtils();
System.out.println(w.test(2));
}
却直接抛异常提示:
java.lang.UnsatisfiedLinkError: com.edu.utils.WordUtils.test(I)I
百度说dll中找不到这个方法。。
有没有会的大神教教我,是不是c++代码写错了?

  • 写回答

3条回答

  • whoisliang 2018-09-21 02:36
    关注

    java通过JNA调用的时候,函数名称也是有规定的:
    package pkg;

    class Cls {

     native double f(int i, String s); 
    
     ... 
    

    }

    Implementing a Native Method Using C++
    extern "C" /* specify the C calling convention */

    jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (

     JNIEnv *env,        /* interface pointer */ 
    
     jobject obj,        /* "this" pointer */ 
    
     jint i,             /* argument #1 */ 
    
     jstring s)          /* argument #2 */ 
    

    {

     const char *str = env->GetStringUTFChars(s, 0); 
    
     ... 
    
     env->ReleaseStringUTFChars(s, str); 
    
     return ... 
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料