vs可以调用java接口吗_关于vs2010下编译dll动态库,JNA接口在java中调用的问题
最近在搞關(guān)于把vs2010中的project,使之能夠在Java下面運(yùn)行,有一個(gè)調(diào)用本地接口的問(wèn)題,JNI那個(gè)涉及到復(fù)雜細(xì)節(jié)太多,就使用了最新的JNA(java native access)
網(wǎng)上也給出了很多關(guān)于一些動(dòng)態(tài)庫(kù)的實(shí)例,如何在java程序中寫接口,對(duì)jna的接口重載,初始化實(shí)例的問(wèn)題,但涉及到如何的多數(shù)是如一些系統(tǒng)的動(dòng)態(tài)庫(kù)(msvcr.dll,c)等,往往缺乏如何寫自己的實(shí)例,編譯成動(dòng)態(tài)庫(kù)的問(wèn)題,即使有的例子往往會(huì)遇到一個(gè)問(wèn)題,很多帖子也有說(shuō)明,如:
:java.lang.UnsatisfiedLinkError: Error looking up function? ????
這個(gè)表示動(dòng)態(tài)庫(kù)已經(jīng)被正確加載了,只是找不到函數(shù)罷了。于是花了很久的功夫找原因,最后才發(fā)現(xiàn)其實(shí)是一個(gè)所謂的decorated 和 undecorated 函數(shù)名的問(wèn)題,
dll 通常默認(rèn)在編譯為動(dòng)態(tài)庫(kù)時(shí),類似于函數(shù)重載的實(shí)現(xiàn)方法,把參數(shù),所屬類,返回值等信息通通加進(jìn)函數(shù)名中,所以當(dāng)JNA那頭開(kāi)始調(diào)用時(shí),只是用原型的函數(shù)名
時(shí),就出現(xiàn)找不到名字的情況。
而只要在函數(shù)之前加上一個(gè)extern "C" ,就相當(dāng)于告訴動(dòng)態(tài)庫(kù)編譯器,只用其undecorated 名字編譯。dependency walker 中也有這個(gè)選項(xiàng)。
總結(jié)
以上是生活随笔為你收集整理的vs可以调用java接口吗_关于vs2010下编译dll动态库,JNA接口在java中调用的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: a as as big rat_干货!A
- 下一篇: SpringCloud Alibaba-