J2ME KVM教程之增加KVM中的系统调用API
创始人
2024-07-15 06:31:47
0

你知道如何增加KVM中的系统调用API  吗,这里向大家描述一下,不同的j2me设备,也有不同的系统调用API以及它们的实现,相信本文介绍一定会让你有所收获。

J2ME KVM教程之如何增加KVM中的系统调用API  

大家都晓得KVM是不支持Native函数调用的,如果要增加一些系统调用的API,那么只能加到KVM内部。同时,不同的j2me设备,也有不同的系统调用API以及它们的实现。我们从SUN那么下载到原始的KVM源代码,如何为其增加一个系统调用API呢?本文以具体实践的步骤一步一步来讲解增加KVM系统API的方法。

其实为KVM增加一个系统调用API比为linux增加一个系统调用API还简单。大致就分成两步工作就完成。一步是在classes.zip中增加一个你自己新增的class,一步是在KVM的nativeCore.c中实现这个新增的class的nativeapi函数。

下面以org.test.MiniTest这个新增的class为例来实现一个TestInt()系统调用函数。函数的功能很简单,就是返回一个整数9999。

1.新增org.test.MiniTest类

从SUN那里下载到j2me_cldc1.1版本的KVM代码后。在j2me_cldcapi目录下,增加orgestMiniTest.Java的包目录以及java文件。然后写上如下的代码:

  1. packageorg.test;  
  2. publicclassMiniTest  
  3. {  
  4. publicstaticnativeintTestInt();  

2.进行***次编译

根据上一篇文章中的KVM编译方法,在命令提示符下,跳到目录j2me_cldcuildwin32下,输入make命令进行***次整体编译。不过,这次编译过程在编译连接KVM中的*.o文件的时候,会提示一个找到_Java_org_test_MiniTest_TestInt符号的错误提示。

这是因为在我们只是在org.test.MiniTest中定义了这个native函数TestInt,但是并没有在KVM的任何一个c文件中实现其对应的函数。

首先编译过程是用javac来编译j2me_cldc/api里面的所有的*.java文件,然后将其class文件打包成一个classes.zip,然后JCC这个工具会默认根据classes.zip生成ROMJavaWin.c和nativeFunctionTableWin.c。而在ROMJavaWin.c声明这个native函数:

  1. externvoidJava_org_test_MiniTest_TestInt(void);  
  2.  

3.实现Java_org_test_MiniTest_TestInt函数

从KVM中的代码可以看到,KVM默认都是把一些native函数放到了nativeCore.c这个文件里面。你也可以自己去新增一些C程序文件,不过本例就把这个Java_org_test_MiniTest_TestInt放在了nativeCore.c文件。

下面是代码:

  1. voidJava_org_test_MiniTest_TestInt(void)  
  2. {  
  3. pushStack(9999);  

这里为什么把返回值使用pushStack这个宏来返回的原因就不好说了,关于JAVA运行的方式其实就是一个堆栈,Java的字节码其实就是一种栈式语言,这个在编译原理里面的中间代码生成那一章可以找到它的原型和其说明。再者,还可以看《InsideJavaVirtualMachine》这本书。

4.第二次编译

第二次编译就是可以生成真正的kvm.exe文件了。还是跟***次编译以及上一篇编译KVM的方法一样,敲入make命令即可。

5.测试MiniTest.TestInt这个API

自己写了一个Test的类,来测试这个API:

  1. importorg.test.*;  
  2. classTest{  
  3. publicstaticvoidmain(String[]args){  
  4. System.out.println("TestResult="+MiniTest.TestInt());  
  5. }  

用javac编译的时候,需要把前面的j2me_cldc/classes.zip拷贝过来,执行:

  1. javac-classpathclasses.zipTest.java  
  2.  
  3. kvm-classpath.Test  

【编辑推荐】

  1. J2ME KVM教程之KVM编译过程
  2. J2ME开发环境搭建必备手册
  3. 三大元素组成J2ME体系结构
  4. 瞻望J2ME前景,看J2ME路在何方?
  5. Java2平台J2SE、J2EE、J2ME三大版本的区别


 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...