探讨大型应用系统发中的混合语言编程问题.docxVIP

  • 0
  • 0
  • 约 10页
  • 2018-04-16 发布于贵州
  • 举报

探讨大型应用系统发中的混合语言编程问题.docx

探讨大型应用系统发中的混合语言编程问题

探讨大型应用系统开发中的混合语言编程问题——以Java和Lisp之间的接口编程方式为例 1 引言 当前,在各种跨开发工具、操作系统和网络的开发方式中,为了更好的实现大型应用系统各种不同的功能,常常采用混合语言编程的方式来完成相应的系统需求。在各种开发语言中,Java语言是开发网络应用程序的首选,而Lisp语言很早就成为 HYPERLINK /humanintelligence/ \t _blank 人工智能领域中应用最广泛的 HYPERLINK /computerscience/ \t _blank 计算机语言。这两种语言都提供了多种与其他语言的接口,使得我们用这两种语言开发的软件模块能够无缝的链接成一个整体。 2 Java的外部接口 2.1 JNI调用non-Java代码 在某些特殊情况下,Java需要调用non-Java程序代码。要和non-Java程序代码衔接,编译器和虚拟机必须提供专门的支持才行。而且还要有额外的工具将Java程序代码对应至non-Java程序代码。Non-Java程序代码的调用标准,是由JavaSoft提供的“Java Native Interface,JNI”实现的。目前JNI的设计只能与用C或C++写的native methods相接。 1)撰写Java程序代码,声明native函数和相应的参数 public class NativeExample { //声明要调用的外部C函数Invoke_Native public static native void Invoke_Native( String Str ); static { System.loadLibrary( NativeImpl ); //将包含native函数的DLL装载到内存 } } public static void main( String[] args ) { NativeExample app=new NativeExample(); app.Invoke_Native( Use Native Function ); //调用外部C函数Invoke_Native } 2)编译Java源文件,生成native函数的C或C++头文件的函数原型声明: javah -jni NativeExample 其中比较关键的是函数头的书写,上面的例子可以生成如下的函数声明: JNIEXPORT void JNICALL Java_NativeExample_Invoke_Native (JNIEnv *,jobject,jstring); 3)实现non-Java程序代码的DLL extern C JNIEXPORT void JNICALL Java_NativeExample_ Invoke_Native(JNIEnv *env,jobject,jstring jMsg) { const char* msg=env-GetStringUTFChars(jMsg,0); printf( Exercise in Java,JNI:%s\ n,msg ); env-ReleaseStringUTFChars(jMsg,msg); } 2.2 CORBA实现语言无关性 CORBA并非某种语言特性,它是一个集成技术,是OMG定义的一套和语言无关的分布式“对象交换标准框架”(standard framework of object interoperability)。CORBA的核心是一套标准的语言、接口和协 HYPERLINK /yilunwen/ \t _blank 议,共由三部分组成:接口定义语言OMG IDL、对象请求代理ORB及标准协议如IIOP。 CORBA客户端(client)和服务器(server)的实现:Java的server对象的实现十分简单,它是个普通的java class,只不过继承了由IDL编译器产生的skeleton。Java实现的客户端代码查询服务器的方法可以使用一个专用的文件(例如:ServerInfoFile),它包含了服务器的位置,以及怎样连接它(服务器)的一些信息。它的内容是一些数字编码的字符串,包含了象IP地址,端口号,以及连接服务器的一些其它信息。每一个Java客户通过用一个包含以上信息的文件名(ServerInfoFile)作为参数来登录。服务器在启动时负责将上述信息写入ServerInfoFile文件中。为了处理ServerInfoFile文件,可以专门生成了一个ServerInfo类,类ServerInfo的主要功能是读取一个ServerInfoFile文件的内容,根据ServerInfoFile文件的内容生成一个CORBA实例。 当一个Java客户端启动的时候,首先调用方法doCennect

文档评论(0)

1亿VIP精品文档

相关文档