JNA(Java Native Access):建立在JNI之上的Java開(kāi)源框架,SUN主導(dǎo)開(kāi)發(fā),用來(lái)調(diào)用C、C++代碼,尤其是底層庫(kù)文件(windows中叫dll文件,linux下是so【shared object】文件)。
JNI是Java調(diào)用原生函數(shù)的唯一機(jī)制,JNA就是建立在JNI之上,JNA簡(jiǎn)化了Java調(diào)用原生函數(shù)的過(guò)程。JNA提供了一個(gè)動(dòng)態(tài)的C語(yǔ)言編寫(xiě)的轉(zhuǎn)發(fā)器(實(shí)際上也是一個(gè)動(dòng)態(tài)鏈接庫(kù),在Linux-i386中文件名是:libjnidispatch.so)可以自動(dòng)實(shí)現(xiàn)Java與C之間的數(shù)據(jù)類(lèi)型映射。從性能上會(huì)比JNI技術(shù)調(diào)用動(dòng)態(tài)鏈接庫(kù)要低。
1.簡(jiǎn)單寫(xiě)個(gè)windows下的dll,文件命名為forjava.dll,其中一個(gè)add函數(shù),采用stdcall調(diào)用約定
main.cpp
#include "main.h"
// a sample exported function
int DLL_EXPORT add(int a ,int b)
{
return a+b;
}
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注