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++代码写错了?

c++

3个回答

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 ... 

}

在你的.net程序的项目属性中打开comvisible
用 regasm 将这个库注册成 com 对象
java通过 jna调用,你的问题可能是没有打开comvisible或者没有注册。

重新说明一下,刚才是不是因为文字太短的原因,被屏蔽了:是JNI

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问