資源描述:
《Java中調(diào)用C生成的DLL.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、·JAVA技巧(Java中調(diào)用C/C++生成的DLL) 一、 生成C的頭文件1.編輯Main.java?。饀blicclassMain? {?publicnativestaticint getStrNum(bytestr[],intstrLen); ?。? 2.生成頭文件 按win+r打開“運(yùn)行"窗口,輸入“cmd”,打開DOS控制臺(tái)窗口。進(jìn)入上面Main。java所在的目錄中,輸入: javac Main。java? javah Main 兩條命令完成后會(huì)生成Main。h文件? 二、 生成DLL ?。保⌒陆展こ獭≡赩S中新建工程:Win32ConsoleApplicat(yī)ion,取名
2、“MakeDLL”,選擇空工程。新建后修改工程屬性:?。ǎ保莈neral中,將“Configuration?。詙pe”改為“DynamicLibrary?。?dll)”; (2)C/C++的General中,將“AdditionalIncludeDirectories”添加兩項(xiàng):? “C:ProgramFilesJavajdk1.5。0_06include”? “C:ProgramFilesJavajdk1.5.0_06includewin32"? 根據(jù)你安裝的JAVA路徑而設(shè)置,這是因?yàn)樵贑/C++編譯過程中要使用JAVA的jni.h等文件2.將上面生成的Main。h添加入工程?。?
3、新建一個(gè)新的文件main.cpp,代碼如下: #include’Main。h’#include’string。h’?JNIEXPORTjint JNICALLJava_Main_getStrNum(JNIEnv*env,jclasscls,jbyteArraystr, jint strLen)? {jbyte*buffer=(*env).GetByteArrayElements(str,0); buffer[strLen]= ’’;//由于JAVA自動(dòng)分配空間,需要傳進(jìn)來字符串長(zhǎng)度參數(shù) jintlen=strlen((char*)buffer); return?。靍n; } 4。按F7編譯
4、鏈接,生成MakeDLL.dll文件? 三、JAVA調(diào)用DLL 在JAVA中使用上面生成的DLL文件:?1。將MakeDLL.dll復(fù)制到與使用DLL的JAVA文件相同的目錄下.? 2。JAVA文件的源代碼:public?。悖欤醩sMain? ?。tatic??。鸖ystem.loadLibrary(’MakeDLL’); }publicnativestaticint getStrNum(bytestr[],?。椋睿簟trLen);?publicstat(yī)icvoidmain(String[]args)? {??。蚢ininstance=newMain();?Stringstr=ne
5、wString(’haha’);intnum=instance.getStrNum(str.getBytes(),str.length());?。觵stem.out。println(num); }? ?。? 總結(jié):?另外,JAVA與DLL函數(shù)的參數(shù)傳遞過程,考試,大提示像int類型的,可以直接從JNI函數(shù)參數(shù)列表中獲?。欢鴶?shù)組元素則要通過JNIEnv來獲?。? jbyte*buffer=(*env).GetByteArrayElements(str,0); //str是參數(shù)列表中jbyteArray變量同理可以獲?。鉮ar[]的元素?! 『瘮?shù)返回時(shí),可以直接用return語句返回。也可以設(shè)置
6、參數(shù)列表中的變量指針來返回: (*env).SetByteArrayRegion(byteArray,0,128,byteArr); byteArray是參數(shù)列表中的jbyteArray變量,作為指針用來返回需要返回的信息;byteArr是jbyte*類型,里面存放的值是要返回的內(nèi)容。? 其它的信息可以從Google或Baidu中通過查找“jni”或“java調(diào)用DLL"來查閱到.