- 0
- 0
- 约 10页
- 2018-04-16 发布于贵州
- 举报
探讨大型应用系统发中的混合语言编程问题
探讨大型应用系统开发中的混合语言编程问题——以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_Nativepublic 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程序代码的DLLextern 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)