Java 呼叫C组件是否一定使用JNI介面呢.docVIP

Java 呼叫C组件是否一定使用JNI介面呢.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java 呼叫C组件是否一定使用JNI介面呢.doc

許多人問道:Java 呼叫C組件只能使用JNI呢? 產生JNI 的介面定義檔(.h)時是否一定先寫個.java檔,之後經過javah程式去轉換,才能得出.h的介面定義檔呢? 兩者的答案都是:不一定。產生JNI 的介面定義檔(.h)正常的程序是: Step-1. 撰寫.java的介面定義檔,例如: ? ? Step-2. 轉譯為.class的檔。 Step-3. 使用javah來產出.h介面定義檔: /* ----- com_misoo_gx06_NativeJniAdder.h 內容 ----- */ /* DO NOT EDIT THIS FILE - it is machine generated */ #include jni.h /* Header for class com_misoo_gx06_NativeJniAdder */ #ifndef _Included_com_misoo_gx06_NativeJniAdder #define _Included_com_misoo_gx06_NativeJniAdder #ifdef __cplusplus extern C { #endif /* * Class: com_misoo_gx06_NativeJniAdder * Method: newObject * Signature: ()J */ JNIEXPORT jlong JNICALL Java_com_misoo_gx06_NativeJniAdder_newObject (JNIEnv *, jclass); /* * Class: com_misoo_gx06_NativeJniAdder * Method: execute * Signature: (JII)J */ JNIEXPORT jlong JNICALL Java_com_misoo_gx06_NativeJniAdder_execute (JNIEnv *, jclass, jlong, jint, jint); #ifdef __cplusplus } #endif #endif ? 之後,就可以寫com_misoo_gx06_NativeJniAdder.c程式碼了。 ? 對於C開發者而言,還要先寫個 .Java介面定義程式,心裡似乎怪怪的,恨不得親自寫上述的.h標頭檔。但是,當介面所含的功能很多、參數也多時,手寫就很容易出錯。Java這邊也難以捉摸如何呼叫 C組件。 ? 至於,JNI之外還有其他的Java與C模組間的標準介面嗎?當然有,例如我寫的第2本 Android書裡,所舉的例子,就利用JDBC介面去呼叫俄羅斯開發的嵌入式資料庫系統。例如: /* ----- ac01.java 程式碼 ------*/ package com.misoo.pkxx; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class ac01 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = new TextView(this); tv.setTextColor(Color.WHITE); tv.setTextSize(16); setContentView(tv); tv.append(\n---------------------------------------------------------); try { Driver drv = (Driver)Class.forName( com.relx.jdbc.LinterDriver).newInstance()

文档评论(0)

整理王 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档