建模与图形思考

Similar documents
詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

新・解きながら学ぶJava


2003 1,,,,,,1902,1905 3, 1911,11, 4,641,, :,,,,, :,,,,,1930,,,, ( ), ( ) ( ) , 3 25 :, 1963,1 :,1972,497 :, 25,1937 3,

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

EJB-Programming-4-cn.doc

马 克 思 主 义 学 院 经 济 与 工 商 管 理 学 院 公 共 管 理 学 院 法 学 院 社 会 学 院 外 国 语 学 院 中 国 现 当 代 史 世 界 中 古 史 世 界 近 现 代 史 文 化 遗 产 马 克 思 主 义 哲 学 国 际 政 治 科 学 社 会 主 义 马 克 思

Microsoft Word - 01.DOC

chp6.ppt

《大话设计模式》第一章

2 政策版 教育部為勗勉軍訓教官落實 育署及大專校院之各分區國防 軍訓工作抱持之高度熱忱 在 102學年度全國績優軍訓教官選拔獲獎名單 高中職組 學生服務及戮力於校園安全維 教育及資源中心完成初審後 校園安全 學生生活輔導及防 護之辛勞 特辦理 102學年 送本部學生事務及特殊教育司 制學生藥物濫用

電機工程系認可證照清單 /7/1

前 言 企 业 社 会 责 任, 又 名 企 业 可 持 续 发 展 报 告, 是 企 业 非 财 务 报 告 的 一 种, 起 源 于 企 业 环 境 报 告, 是 企 业 实 现 可 持 续 发 展, 落 实 科 学 发 展 观, 在 企 业 的 健 康 成 长 和 企 业 的 社 会 责 任

EJB-Programming-3.PDF

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

第3章.doc

Microsoft Word 電腦軟體設計.doc

untitled

( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政

梅花集团

泪 状 物 雨 水 酒 血 自 来 水 恩 泽 弱 水 三 千 一 股 股 淌 进 沙 漏 回 到 黑 暗 的 胃 脘 昨 夜 墨 迹 未 干 黎 明 的 海 涂 刚 刚 镀 过 银 谁 在 对 镜 梳 妆 可 以 踩 吗? 探 一 只 脚 试 试 海 洋 局 的 种 族 歧 视 那 边 是 五 星

<4D F736F F D20312EB2B8C8E9C6DAB5C4C5AEC8CB5FBFCECEC4BA865F312E646F63>

今 天 没 事, 就 回 来 了 ( 付 程 易 ) 是 江 城 的 首 富, 付 程 易 的 仆 人 进 到 木 紫 欣 的 家 里, 大 概 有 二 十 几 人 最 前 面 的 应 该 是 管 家 身 穿 随 然 不 是 很 华 丽, 但 也 不 是 很 寒 酸, 后 面 的 衣 着 都 是 一

<4D F736F F D20B14DC344ACE3A8732DA5C0BFCBC368AD4CA451ADD3A4EBAABABEFAB57B2E646F63>

前 言 我 之 所 以 選 擇 此 篇 論 文 來 談 東 坡 居 士 ( 註 1) 的 茶 藝 美 學, 主 要 源 於 過 去 對 其 書 法 創 作 及 理 念 的 探 析 研 究 及 更 早 對 先 生 詩 詞 文 章 雄 奇 飄 逸 淡 遠 曠 達 的 崇 仰 之 情 而 宋 代 的 書

《河殇》

中国教育管理全集_二十五_

九十六學年度 高三學測作文(各班佳作版)

<4D F736F F D20BAA3CDE2BCE0B9DCB7E2C6A C4EA3130D4C2D0C2B5F7D5FB29>

GD053.PDF

Microsoft Word - LIANG梁山伯與祝英台.doc

Microsoft Word - 02談老年白內障.doc

中央一号文件

2011年党风廉政信息(第二十三辑)

123

艺术

目 录 一 重 要 提 示... 3 二 公 司 主 要 财 务 数 据 和 股 东 变 化... 3 三 重 要 事 项... 6 四 附 录 / 20

安全教育案例

<4D F736F F D20B8DFBDCCB6AFCCAC5F C4EAB5DA3038C6DA2DD7DBBACFA3BAB8DFB5C8BDCCD3FDB7A2D5B9B8C4B8EFB6AFCCACBBE3B1E0>


2048.doc

<4D F736F F D20B8F2A6B1BEA4B1D3BEC7BE69A5CDB4BCBC7AA4A7B6C0ABD2A4BAB8672E646F63>

「行政院及所屬各機關出國報告綜合處理要點」

p0188.PDF

第五讲

枣 庄 八 一 水 煤 浆 热 电 有 限 责 任 万 千 瓦 公 司 煤 矸 石 综 合 利 用 热 电 滨 州 市 沾 化 区 城 市 供 热 中 心 背 万 千 瓦 压 机 组 郓 城 县 生 活 垃 圾 焚 烧 发 电 日 处 理 生 活 垃 圾 吨 兆 瓦 山 东 沂 蒙 抽 水 蓄 能


!"#$ %

<4D F736F F D20B0B2C8ABD6AACAB6CAD6B2E12E727466>

中国农业大学水利与土木工程学院文件

* 春 中 喜 王 九 相 寻 ( 晚 春 )* 二 月 湖 水 清, 家 家 春 鸟 鸣 林 花 扫 更 落, 径 草 踏 还 生 酒 伴 来 相 命, 开 尊 共 解 酲 当 杯 已 入 手, 歌 妓 莫 停 声 * 梅 道 士 水 亭 * 傲 吏 非 凡 吏, 名 流 即 道 流 隐 居 不

Microsoft PowerPoint - ³Ò´f¿³

石 狮 市 小 学 语 文 阅 读 与 习 作 教 学 征 文 评 选 优 秀 作 品 汇 编 耕 耘 ( 第 17 辑 ) 目 录 前 言 小 学 教 研 室 [4] 阅 读 教 学 把 握 内 在 联 系 提 升 理 性 认 识 祥 芝 中 心 校 黄 军 荣 [5] 求 真 务 实 有 效 教

<4D F736F F D20D0A1CBB5BCAFA1B6B9ABBCA6B5C4D4A2D1D4A1B7A3A8BCADD2BBA3A92E646F63>

<4D F736F F D20342EB160A8A3A4DEB05FB0A9BDE8B2A8C350AF67AABAAF66A65DA4CEA8BEAA76AA6B2E646F63>

' I 6

冷凍空調裝修技術士技能檢定規範說明

<4D F736F F D20A4A4C1FAC3E4BBDAA448C3E4A677AF50BB50C452A5BDAC46A7BD>

我分了几类,之后发现社长所说的“大国脸谱,人民记忆”真是经典之语

综合26

6寸PDF生成工具

艾宁《问中医几度秋凉》

不 管 有 多 忙, 请 您 抽 空 把 这 个 文 件 看 完!! 七 十 年 代 送 礼 送 点 心 八 十 年 代 送 礼 送 保 健 品 九 十 年 代 送 礼 送 鲜 花 二 十 一 世 纪, 送 礼 送 什 么 呢? 二 十 一 世

目 录 禁 令 一 览 中 央 八 项 规 定 5 中 央 六 项 禁 令 6 关 于 在 全 国 纪 检 监 察 系 统 开 展 会 员 卡 专 项 清 退 活 动 的 通 知 中 央 纪 委 监 察 部 7 关 于 党 政 机 关 停 止 新 建 楼 堂 馆 所 和 清 理 办 公 用 房 的

授权发布:中华人民共和国国民经济和社会发展第十二个五年规划纲要

Microsoft Word - 中國文學.doc

13


<4D F736F F D20A4E8A4E8A470BBA1ACE3A8735FA457B6C7AAA95F2E646F63>

( 二 ) 广 东 省 外 地 区 1 北 京 市.19 2 太 原 市.23 3 张 家 口 市 24 4 天 津 市.25 5 济 南 市.27 6 青 岛 市.28 7 沈 阳 市.29 8 大 连 市.31 9 哈 尔 滨 市 长 春 市 上 海 市


Microsoft Word - 全文.doc

城 市 学 研 究 第 辑 革 既 是 贯 彻 落 实 中 央 决 策 部 署 的 具 体 体 现 也 是 深 入 探 索 城 乡 统 筹 发 展 的 实 践 需 要 事 实 上 年 重 庆 市 成 为 全 国 统 筹 城 乡 综 合 配 套 改 革 试 验 区 时 国 务 院 通 过 了 重 庆

<4D F736F F D C4EAB5DAD2BBBCBEB6C8B1A8B8E6C8ABCEC42E646F63>

一、入园指引:

卫生部托儿所、幼儿园卫生保健制度

Microsoft Word - 魯迅-藥.doc

附:

目 录 第 一 编 校 办 公 室 工 作 制 度 学 校 发 展 规 划 工 作 管 理 规 定 学 校 规 章 制 度 管 理 办 法 学 校 会 议 管 理 制 度 校 长 办 公 会 议 事 制 度 学 校 例

前 世 所 造 恶 业 和 善 业 往 往 在 今 生 显 现 各 种 苦 乐 就 象 我 们 脸 上 如 果 没 有 各 种 污 迹, 在 镜 子 中 也 不 会 显 现 出 来 ; 同 样, 如 果 我 们 以 前 没 有 造 下 恶 业 和 善 业, 那 今 生 当 中 就 不 会 有 苦 乐

茶文化与人际关系

修習止觀坐禪法要

就 这 样 到 了 取 通 知 书 的 日 子, 我 怀 揣 着 祈 祷 的 心 向 校 园 走 去, 坐 在 教 室 里 等 待 着 成 绩 单, 当 老 师 公 布 成 绩, 念 到 我 的 成 绩 时, 我 傻 了, 呆 呆 的 凝 望 着 窗 外, 似 乎 时 间 已 经 静 止, 那 一

馬太福音 劉梅蕾師母

!!! " "!! " " " "!! " "!!! " "! " "! " " " " " " "

Microsoft Word - SONGSHI《宋詩一百首》.doc

<4D F736F F D20D6D0CEF7D2BDBDE1BACFCDE2BFC6D1A720D6D0CEF7D2BDBDE1BACFB9C7C9CBBFC6D1A72E646F63>

我 适 合 当 律 师 吗? 文 中 华 全 国 律 师 协 会 常 务 理 事 : 陈 锡 康 按 照 国 人 的 传 统, 勉 励 别 人 或 者 教 导 别 人, 大 抵 都 是 尊 者 长 者 或 成 功 者 的 专 利 作 为 一 个 还 算 是 青 年 律 师 的 基 层 法 律 工 作

党风廉政

Microsoft Word - 煽.doc

Microsoft Word - 文档 2

6寸PDF生成工具

第十章 中国传统节日与礼俗(22900)

中 国 画 院 画 家 力 作 将 集 体 亮 相 济 南...21 韩 中 日 国 际 女 书 画 家 交 流 展 在 韩 国 举 办...22 宁 波 博 物 馆 馆 藏 邵 克 萍 版 画 波 兰 展 出...22 宜 昌 人 在 美 国 办 画 展...22 文 物 保 护 23 北 宋 陪


校旗及学风、校风、教风

通 过 这 例 子, 可 以 理 解 处 方 用 药 的 大 法, 并 能 看 到 几 个 问 题 首 先 是 处 方 根 据 治 法, 有 一 定 的 方 向 和 范 围, 针 对 病 因 病 垃 和 症 状 三 方 面 用 药, 应 该 互 相 呼 应 如 前 胡 祛 风 寒, 又 能 降 气

蓮池大師戒殺放生文圖說-一口咬死

证券代码:002153

Transcription:

C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂

3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数

如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性 值 ; 3. 从 本 地 C 函 数 去 创 建 Java 层 的 对 象

关 于 JNI, 大 家 都 知 道 如 何 从 Java 调 用 C 函 数 然 而, 在 Android 里, 反 而 由 C 呼 叫 Java 的 情 形 才 更 具 关 键 性 例 如,Activity 的 跨 进 程 沟 通 如 下 :

当 App 里 的 Activity 透 过 IBinder 接 口 来 与 Service 进 行 IPC 沟 通 时, 事 实 上 是 由 Java 层 的 Activity 调 用 C/C++ 模 块 去 进 行 IPC 沟 通, 再 由 C 模 块 调 用 Java 层 的 Service 所 以,Java 与 C 函 数 的 双 向 调 用 都 是 Android 平 台 的 重 要 机 制

举 例 说 明

在 CounterNative 类 别 里, 有 3 个 本 地 函 数 : 静 态 (static) 的 nativeexecute() 和 一 般 的 nativesetup() 及 nativeexec() 其 中, 静 态 nativeexecute() 会 调 用 Java 层 的 一 般 的 setv() 函 数 ; 而 一 般 的 nativeexec() 会 调 用 Java 层 的 静 态 setvalue() 函 数

// ac01.java //.. public class ac01 extends Activity implements OnClickListener { private CounterNative cn; @Override public void oncreate(bundle savedinstancestate){ //.. cn = new CounterNative(); } @Override public void onclick(view v) { switch(v.getid()){ case 101: cn.nativeexec(10); break; case 102: CounterNative.nativeExecute(11); break; case 103: finish(); break; }}}

指 令 :cn = new CounterNative(); 其 调 用 CounterNative() 建 构 函 数 执 行 到 nativesetup() 函 数, 转 而 调 用 本 地 C 函 数 : com_misoo_counter_counternative_nativesetup() 这 个 函 数 只 负 责 将 m_class m_object m_static_mid 和 m_mid 储 存 在 C 模 块 的 静 态 区 域 里 而 已

执 行 指 令 : cn.nativeexec(10); 就 呼 叫 C 函 数 :nativeexec(), 计 算 出 sum 值 之 后, 透 过 VM 的 CallVoidMethod() 函 数 而 调 用 到 目 前 Java 对 象 的 setvalue() 函 数, 把 sum 值 传 入 Java 层, 并 显 示 出 来

// CounterNative.java // public class CounterNative { private static Handler h; static { System.loadLibrary("MyCounter"); } public CounterNative(){ h = new Handler(){ public void handlemessage(message msg) { ac01.ref.settitle(msg.obj.tostring()); }}; nativesetup(); } private static void setvalue(int value){ String str = "Value(static) = " + String.valueOf(value); Message m = h.obtainmessage(1, 1, 1, str); h.sendmessage(m); }

} private void setv(int value){ String str = "Value = " + String.valueOf(value); Message m = h.obtainmessage(1, 1, 1, str); h.sendmessage(m); } private native void nativesetup(); public native static void nativeexecute(int n); public native void nativeexec(int n);

ac01 调 用 CounterNative 类 的 建 构 函 数, 此 函 数 诞 生 了 一 个 Handler 对 象, 并 且 调 用 本 地 的 nativesetup() 函 数 随 后,ac01 将 调 用 静 态 的 nativeexecute() 函 数, 此 函 数 则 反 过 来 调 用 Java 层 一 般 的 setv() 函 数 接 着,ac01 调 用 一 般 的 nativeexec() 函 数, 此 函 数 则 反 过 来 呼 叫 Java 层 的 静 态 setvalue() 函 数

留 意 : 目 前 该 行 代 码 正 由 那 一 个 线 程 所 执 行 请 记 得, 在 学 习 Android 时, 从 第 一 秒 钟 就 持 着 优 雅 的 素 养 : 对 于 每 一 行 代 码, 都 必 须 能 准 确 而 正 确 地 说 出 来, 目 前 该 行 代 码 正 由 那 一 个 线 程 (Thread) 所 执 行 的

/* com.misoo.counter.counternative.c */ #include "com_misoo_counter_counternative.h" jclass m_class; jobject m_object; jmethodid m_mid_static, m_mid; JNIEXPORT void JNICALL Java_com_misoo_counter_CounterNative_nativeSetup (JNIEnv *env, jobject thiz) { jclass clazz = (*env)->getobjectclass(env, thiz); m_class = (jclass)(*env)->newglobalref(env, clazz); m_object = (jobject)(*env)->newglobalref(env, thiz); m_mid_static = (*env)->getstaticmethodid(env, m_class, "setvalue", "(I)V"); m_mid = (*env)->getmethodid(env, m_class, "setv", "(I)V"); return; }

JNIEXPORT void JNICALL Java_com_misoo_counter_CounterNative_nativeExecute (JNIEnv *env, jclass clazz, jint n) { int i, sum = 0; for(i=0; i<=n; i++) sum+=i; (*env)->callvoidmethod(env, m_object, m_mid, sum); return; } JNIEXPORT void JNICALL Java_com_misoo_counter_CounterNative_nativeExec (JNIEnv *env, jobject thiz, jint n) { int i, sum = 0; for(i=0; i<=n; i++) sum+=i; (*env)->callstaticvoidmethod(env, m_class, m_mid_static, sum); return; }

说 明 nativesetup() 函 数 的 内 容 上 述 的 nativesetup() 函 数 之 定 义 : JNIEXPORT void JNICALL Java_com_misoo_counter_CounterNative_nativeSetup (JNIEnv *env, jobject thiz) { //.. }

其 中 的 第 2 个 参 数 thiz 就 是 Java 层 目 前 对 象 的 参 考 (Reference) 所 谓 目 前 对 象 就 是 正 在 调 用 此 本 地 函 数 的 Java 层 对 象 例 如, 在 此 范 例 里, 就 是 CounterNative 类 的 对 象 参 考

指 令 : jclass clazz = (*env)->getobjectclass(env, thiz); 向 VM(Virtual Machine) 询 问 这 thiz 所 参 考 对 象 的 类 ( 即 CounterNative 类 别 )

由 于 这 class 是 这 本 地 函 数 的 区 域 (Local) 变 量, 当 此 函 数 执 行 完 毕 后, 这 个 class 变 量 及 其 所 参 考 的 值 都 会 被 删 除 因 此, 使 用 指 令 : m_class = (jclass)(*env)->newglobalref(env, clazz); 来 将 区 域 型 的 class 参 考 转 换 为 全 域 (Global) 型 的 参 考, 并 将 此 全 域 参 考 存 入 到 这 本 地 C 模 块 的 全 域 变 数 m_class 里

如 此, 当 函 数 执 行 完 毕 后, 这 个 m_class 变 量 及 其 所 参 考 的 值 都 不 会 被 删 除 掉 同 理, thiz 也 是 区 域 变 量, 函 数 执 行 完 毕, 这 个 thiz 及 其 值 都 会 被 删 除 因 此, 使 用 指 令 : m_object = (jobject)(*env)->newglobalref(env, thiz); 将 区 域 型 的 class 参 考 转 换 为 全 域 (Global) 型 的 参 考, 并 将 此 全 域 参 考 存 入 到 这 本 地 C 模 块 的 全 域 变 数 m_object 里

接 着, 指 令 : m_mid_static = (*env)->getstaticmethodid(env, m_class, "setvalue", "(I)V"); 这 要 求 VM 去 取 得 m_class 所 参 考 的 类 ( 就 是 CounterNative 类 ) 的 setvalue() 函 数 的 ID 值 并 将 此 ID 值 存 入 到 这 本 地 C 模 块 的 全 域 变 数 m_mid_static 里

同 理, 指 令 : m_mid = (*env)->getmethodid(env, m_class, "setv", "(I)V"); 这 找 到 CounterNative 类 的 setv() 函 数 的 ID, 并 将 此 ID 值 存 入 到 这 本 地 C 模 块 的 全 域 变 数 m_mid 里

由 于 m_class 和 m_object 两 者 都 是 参 考 (Reference), 其 必 须 透 过 VM 的 NewGlobalRef() 来 转 换 出 全 域 性 的 参 考 至 于 m_static_mid 和 m_mid 则 是 一 般 的 整 数 值, 直 接 储 存 于 静 态 变 量 里 即 可 了

说 明 nativeexecute() 和 nativeexec() 函 数 的 内 容 于 此, 这 nativesetup() 函 数 已 经 将 m_class m_object m_static_mid 和 m_mid 储 存 妥 当 了, 准 备 好 让 后 续 调 用 nativeexecute() 和 nativeexec() 函 数 时 能 使 用 之

例 如 : JNIEXPORT void JNICALL Java_com_misoo_counter_CounterNative_nativeExecute (JNIEnv *env, jclass clazz, jint n) { // (*env)->callvoidmethod(env, m_object, m_mid, sum); }

这 个 m_object 正 指 向 Java 层 的 目 前 对 象, 而 m_mid 则 是 其 setv() 函 数 的 ID 依 据 这 两 项 资 料, 就 能 透 过 VM 的 CallVoidMethod() 函 数 而 调 用 到 目 前 Java 对 象 的 setv() 函 数, 而 把 数 据 传 送 到 Java 层

Summary:How To 拿 目 前 对 象 指 针 换 取 它 的 类 ( 目 前 类 )ID: jclass clazz = (*env)->getobjectclass(env, thiz); 拿 目 前 类 ID 换 取 某 函 数 ID: m_mid = (*env)->getmethodid(env, m_class, "setv", "(I)V");

依 据 类 ID 和 函 数 ID, 调 用 这 指 定 的 类 里 的 指 定 的 函 数 : (*env)->callvoidmethod(env, m_object, m_mid, sum);

~ Continued ~