Article View: cn.bbs.comp.lang.java
Article #22086Java���˼��--��¼A ʹ�÷�JAVA����
From: �˺�2��
Date: Tue, 28 Oct 2003 01:50
Date: Tue, 28 Oct 2003 01:50
505 lines
61551 bytes
61551 bytes
JAVA���Լ����API��Ӧ�ó����̽ӿڣ�Ӧ��Ӧ�ó���ı�д�Ѵ´����ࡣ����ijЩ ����£����DZ���ʹ�÷�JAVA���롣���磬������ʱҪ���ʲ���ϵͳ��ר�����ԣ����� ���Ӳ���豸�����ظ�ʹ�����еķ�Java�ӿڣ�����Ҫʹ�á���ʱ�����С��Ĵ��� �Σ��ȵȡ����Java����Ĺ�ͨҪ���ñ������͡�������ר��֧�֣����踽�ӵ� ���߽�Java����ӳ��ɷ�Java���루Ҳ��һ���������ڵ�15�µġ�һ��WebӦ�á�С ���У��и����ӽ�����������ñ��������ͬ��Java�������ӣ���Ŀǰ����ͬ�Ŀ��� ��Ϊ�����ṩ�˲�ͬ�ķ�����Java 1.1�С�Java���нӿڡ���Java Native Interface�� JNI������������Լ��ġ�Java�����ڽӿڡ���Java Runtime Interface���ƻ����� ���ṩ��J/Direct������Դ�ӿڡ���Raw Native Interface��RNI���Լ�Java/COM���ɷ� ���� ���������������������ֵIJ�̬ͬ�ȶԳ���Ա�Ƿdz�����ġ���JavaӦ�ñ�����ù� �з����������Ա����Ҫʵ�ֹ��з����IJ�ͬ�汾����������Ӧ�ó������е�ƽ̨���� ������ԱҲ��ʵ����Ҫ��ͬ�汾��Java���룬�Լ���ͬ��Java����� ��һ��������CORBA��ͨ�ö����������ṹ����������OMG����������飬һ�ҷ�Ӯ�� �ԵĹ�˾Э�ᣩ������һ�ּ��ɼ�����CORBA�����κ����Ե�һ���֣�ֻ��ʵ��ͨ��ͨ�� ���������һ�ֹ淶������������ɲ�ͬ����ʵ�ֵĶ���֮��ʵ�֡������������ ��������ͨ�����ߵ����ֽ���ORB������������?������������ʵ�ֵ�һ�ֲ�Ʒ�� ����������Java���Թ淶��һ���֡� ����¼����JNI��J/DIRECT��RNI��JAVA/COM���ɺ�CORBA���и������������������ε� ̽�֣�������ʱ���ٶ������Ѷ���صĸ���ͼ�������һ���̶ȵ���ʶ��������� ��Ӧ���ܹ����бȽϲ�ͬ�ķ�����������Լ�Ҫ�����������ѡ����ǡ����һ�֡� A.1 Java���нӿ� JNI��һ�ְ��ݼ���ı�̽ӿڣ��������Ǵ�JavaӦ�ó�������ù��з�����������Jav a 1.1�������ģ�ά������Java 1.0����Ӧ���ԡ��������з����ӿڡ���NMI������ij�� �̶ȵļ��ݡ�NMI�����һЩ�ص�ʹ��δ������������֧�֡����ǵ����ԭ��Java�� �Խ����İ汾���ܲ����ṩ��NMI��֧�֣����Ҳ���������� Ŀǰ��JNIֻ������C��C++д�ɵĹ��з�����������JNI�����ǵĹ��з������ԣ� ����������鼰����Java������������ִ��� ������Java���� �����Ͷ����쳣�� ��װ���ಢ��ȡ����Ϣ ���������������ͼ�� ���ԣ�ԭ����Java���ܶ��༰�������ļ������������ڹ��з�����ͬ����������� A.1.1 ���ù��з��� �����ȴ�һ�������ӿ�ʼ��һ��Java������ù��з����������ٵ���Win32��API�� ��MessageBox()����ʾ��һ��ͼ�λ����ı�����������Ժ�Ҳ����J/Directһ־ʹ�� �������ƽ̨����Win32��ֻ�轫�����������ݵ�Cͷ�� #include <windows.h> �滻�ɣ� #include <stdio.h> ������MessageBox()�ĵ��û��ɵ���printf()���ɡ� ��һ����д���Թ��з���������Ա�������������Java���룺 999ҳ���� �ڹ��з��������ĺ��棬������һ��static����飬������System.loadLibrary()�� �����κ�ʱ���������������ǡ���� System.loadLibrary()��һ��DLL�����ڴ棬 ������ͬ������ӡ�DLL����λ�����ϵͳ·���������ڰ���Java���ļ���Ŀ¼�С��� �ݾ����ƽ̨��JVM���Զ�����ʵ����ļ���չ�� 1. Cͷ�ļ��������javah ���ڱ������JavaԴ�ļ������Ա��������.class�ļ�����javah��javah����1.0������ ���ģ�����������Ҫʹ��Java 1.1 JNI�����Ա���ָ��-jni���� javah -jni ShowMsgBox javah��������ļ�����Ϊÿ�����з���������C��C++ͷ�ļ������һ������ԭ�͡����� ��������ShowMsgBox.hԴ�ļ���Ϊ��ϱ����Ҫ����������һ���ģ��� 1000ҳ���� �ӡ�#ifdef_cplusplus�����Ԥ������������Կ��������ļ��ȿ���C���������룬�� ����C++���������롣��һ��#include�������jni.h����һ��ͷ�ļ�������֮һ�Ƕ��� ���ļ����ಿ���õ������ͣ�JNIEXPORT��JNICALL��һЩ�꣬���ǽ������ʵ������䣬 �Ա�����Щ��ͬƽ̨ר�õ���������ϣ�JNIEnv��jobject�Լ�jstring����JNI����� �Ͷ��塣 2. ��ƹ���ͺ���ǩ�� JNIͳһ�˹��з��������������һ���Ƿdz���Ҫ�ģ���Ϊ�����������Java������ ���з������������Ļ��Ƶ�һ���֡��Ӹ���˵�����й��з�����Ҫ��һ����Java���� ͷ���������Java���������֣��»����ַ�����Ϊ�ָ���ʹ�á���Java���з��������� �����������ظ�������ôҲ�Ѻ���ǩ���ӵ����ֺ��档��ԭ��ǰ���ע�����ҿ� �������е�ǩ�����˽����������з���ǩ�����ϸ���������ο���Ӧ��JNI�ĵ� �� 3. ʵ���Լ���DLL ��ʱ������Ҫ����ȫ���������дһ��C��C++Դ�ļ��������а���javah��ɵ�ͷ�ļ� ����ʵ�ֹ��з�����Ȼ����������һ����̬���ӿ⡣��һ���ֵĹ�������ƽ̨�й� �ģ������Ҽٶ������Ѿ�֪����δ���һ��DLL��ͨ�����һ��Win32 API������Ĵ��� ʵ���˹��з������������������ӵ�һ����ΪMsgImpl.dll���ļ�� 1001ҳ���� ����Win32û����Ȥ��ֻ�����MessageBox()���ã�����Ȥ�IJ���������Χ�Ĵ��롣���� �����з����ڲ����Ա����Ƿ���Java�Ĵ��š���һ���Ա���������JNIEnv�ģ����а� �˻ص�JVM��Ҫ�����йҹ�����һ������ϸ�����������ڷ��������Ͳ�ͬ���ڶ����Ա��� Ҳ���Լ���ͬ�ĺ��塣��������������ķ�static������Ҳ����ʵ������ڶ����� �����ȼ���C++�ġ�this��ָ�룬��������Java�ġ�this�����������˵��ù��з������� ��������static���������Ƕ��ض�Class�����һ�����ã������������Ǹ�Class�� ����ʵ�ֵġ� ʣ����Ա�����?�ݵ����з����������Java����������Ҳ����������ʽ���ݵģ� �����ǽ��еġ���ֵ�����ݡ� �ں����С���������������δ�һ�����з������ڲ����ʺͿ���JVM��ͬʱ������ ������и��꾡�Ľ��͡� A.1.2 ����JNI����JNIEnv�Ա��� ����JNI�������Ա�ɴ�һ�����з������ڲ���JVM������������ǰ��������� ����������ÿ��JNI���з����������һ��������Ա�����Ϊ�Լ��ĵ�һ������JNI Env�Ա�����������ָ������ΪJNIEnv_��һ������JNI��ݽṹ��ָ�롣JNI��ݽṹ�� һ��Ԫ����ָ����JVM��ɵ�һ�������ָ�룻�������ÿ��Ԫ�ض���ָ��һ��JNI���� ��ָ�롣�ɴӹ��з������ڲ�������JNI����ĵ��ã������dz������Щָ������ã��� ��IJ���ʵ�ʺܼ���ÿ��JVM�����Լ��ķ�ʽʵ����JNI�������ǵĵ�ַ�϶�λ ��Ԥ�ȶ���õ�ƫ�ƴ��� ����JNIEnv�Ա���������Ա�ɷ���һϵ�к�����Щ����ɻ���Ϊ������� ����ȡ�汾��Ϣ ��������Ͷ������ �����ƶ�Java�����ȫ�ֺ;ֲ����� ������ʵ���ֶκ;�̬�ֶ� ������ʵ��;�̬���� ��ִ���ִ���������� ������Ϳ���Java�쳣 JNI����������൱�࣬���ﲻ���������෴���һ����ҽ�ʾʹ����Щ����ʱ�����һ Щ��ԭ�?���˽����ϸ�������������Լ����ñ�������JNI�ĵ��� ���۲�һ��jni.hͷ�ļ����ͻᷢ����#ifdef _cplusplusԤ�������������ڲ�������C+ +����������ʱ��JNIEnv_�ṹ�������һ���ࡣ�������˴�����Ƕ����ͨ��һ�� ������Ϥ�������Щ���������ǿ��Դ��ݷ���JNI�������磬ǰ����������� �д��룺 (*jEnv)->ReleaseStringUTFChars(jEnv, jMsg,msg); ����C++��ɸ�д������������ӣ� jEnv->ReleaseStringUTFChars(jMsg,msg); ��ҿ�ע��Լ�������Ҫͬʱ�����jEnv���������ã���ͬ��ָ�벻����Ϊ��һ���� ��ݸ�JNI������á�����Щ����ʣ�µĵط����һ�ʹ��C++���Ĵ��롣 1. ����Java�ִ� ��Ϊ����JNI�����һ�����ӣ���˼�������Ĵ��롣�������������JNIEnv���Ա���j Env������һ��Java�ִ���Java�ִ���ȡ���� Unicode��ʽ�����Լ����յ�����һ���ִ� ����������һ����Unicode������printf()�������ȱ�����JNI���� GetStringUT FChars()����ת����ASCII�ַ�ú����ܽ���һ��Java�ִ���Ȼ�����ת����UTF-8�� ����8λ������� ASCIIֵ������16λ�������Unicode����ԭʼ�ִ���������ȫ��AS CII���ɣ���ô����ִ�Ҳ��ASCII���� GetStringUTFChars��JNIEnv���ָ����Ǹ��ṹ���һ���ֶΣ�������ֶ�����ָ��һ �������ָ�롣Ϊ����JNI���������ô�ͳ��C�������һ������ͨ��ָ�룩���� ��������ʽ��ʵ�ֶ�����JNI����ķ��ʡ� A.1.3 ���ݺ�ʹ��Java���� ��ǰ���У����ǽ�һ���ִ����ݸ���з�������ʵ�ϣ���ɽ��Լ�������Java���� ����з����� �����ǵĹ��з����ڲ����ɷ������յ�����Щ������ֶμ������� Ϊ���ݶ����������з���ʱҪ����ԭʼ��Java�����������ʾ��MyJavaClass��һ�� public���������ֶΣ��Լ�һ��public������ UseObjects��������һ�����з��������� ����MyJavaClass���һ������Ϊ������з����Ƿ��ܿ����Լ����Ա��������������� �Ա����� public�ֶΣ����ù��з�����Ȼ���ӡ��public�ֶε�ֵ�� 1004ҳ�ϳ��� ����ô��룬����.class�ļ����ݸ�javah�Ϳ���ʵ�ֹ��з�������������������� ��һ��ȡ���ֶκͷ���ID���ͻ�ͨ��JNI����������ǡ� 1004-1005ҳ���� ���һ���Ա����⣬C++��������һ��jobject������Java�������á����С�����һ �桪���Ǹ����������Ǵ�Java�����ﴫ�ݵġ����Ǽض�ȡaValue�������ӡ������ �ı����ֵ�����ö����divByTwo()�������ٽ�ֵ���´�ӡһ�顣 Ϊ����һ���ֶλ������ȱ����ȡ��ı�ʶ�������ʵ���JNI����ɷ����ȡ�� �����Ԫ�����Լ�ǩ����Ϣ����Щ����᷵��һ����ʶ��������ɷ��ʶ�Ӧ��Ԫ�� ��������һ��ʽ�Ե���Щ���ۣ������ǵĹ��з���ȷʵ��Java������ڲ�����һ����֪ ����ˣ������ͨ����JVM���ص���������ֶκͷ���������һ������ͬ��JVM�Ϳ�ʵ�� ��ͬ���ڲ����֣�ͬʱ����Թ��з������Ӱ�졣 ������Java���ͻᷢ�ִ�Java��һ�ഫ���Ķ����������ǵĹ��з�������ġ����� �ݵĵ�����ʲô�أ���ָ�룬����Java���ã����������ռ����ڹ��з��������ڼ����� ��ʲô�أ� �����ռ������ڹ��з���ִ���ڼ�������У�����һ�ι��з��������ڼ䣬���ǵĶ��� �ɱ�֤���ᱻ�����������ռ�ȥ��Ϊȷ����һ�㣬���ȴ����ˡ��ֲ����á������ڹ� �з�������֮����������������ǵġ������ڡ�����ù��ϢϢ��أ������ܹ���֤ �����ڹ��з��������ڼ����Ч�ԡ� ������Щ���û���ÿ�κ�����õ�ʱ�����ƻ������Բ�����static�������������� �����ľֲ����������ؿ���������ϣ��һ�������ں�������ڼ������Ч������Ҫһ�� ȫ�����á�ȫ�����ò�����JVM�����ģ���ͨ������ض���JNI�������Ա�ɽ��ֲ��� ����չΪȫ�����á�����һ��ȫ������ʱ��������ö���ġ����ʱ�䡱����ȫ���� �ã��Լ������õĶ���һֱ�����ڴ��ֱ�����ض���JNI������ȷ�ͷ���������� ����������C��malloc()�� free()�� A.1.4 JNI��Java�쳣 ����JNI���ɶ�������ӡ�Լ����¶���Java�쳣��������һ��Java���������� �Գ���Ա��˵�������е���ר�õ�JNI�����Ա���쳣���д��?�����г������쳣�� ���һЩJNI���� ��Throw()������һ�����е��쳣�����ڹ��з������������¶���һ���쳣�� ��ThrowNew()�����һ���µ��쳣�������䶪�� ��ExceptionOccurred()���ж�һ���쳣�Ƿ��ѱ�������δ��� ��ExceptionDescribe()����ӡһ���쳣�Ͷ�ջ������Ϣ�� ��ExceptionClear()�����һ��������쳣�� ��FatalError()�����һ�����ش������ء� ��������Щ�����У���ܺ��ӵľ���ExceptionOccurred()��ExceptionClear()����� ��JNI�����ܲ����쳣������û������Java��try���ڵ������������Կɹ����á����� ��ÿһ��JNI�������֮���������ExceptionOccurred()���˽��쳣�Ƿ��ѱ����� ������һ���쳣����ѡ�������Կ��ƣ�����ʱ��Ҫ���¶�����Ȼ�����ȷ ���쳣���ձ������������Լ��ĺ������� ExceptionClear()��ʵ�֣����쳣������ ����Ҳ����������ijЩ�����н��С���������Σ���һ�����DZز����ٵġ� ���DZ��뱣֤�쳣����������������һ���쳣���������µ���һ��JNI���� ��õĽ����������Ԥ֪�ġ�Ҳ�������JNI��������쳣ʱ��ȫ���ã���Ȼ������ ����ר�ŵ��쳣���ƺ��� A.1.5 JNI���̴߳��� ����Java��һ�ֶ��߳����ԣ������߳̿���ͬʱ������һ�����з����ĵ��ã�����һ�� �̷߳������ã����з��������������ڼ���ͣ������ʱ����ȫҪ�ɳ���Ա����֤���е� ���ڶ��̵߳Ļ����а�ȫ���С����磬Ҫ������һ��δ���м��ӵķ����Ĺ�����ݡ� ��ʱ��������Ҫ������ѡ�����з�������Ϊ��ͬ���������ڹ��з����ڲ���ȡ���� ijЩ���ԣ�ȷ����ݴ�����ȷ�ز������С� ���⣬��Բ�Ҫͨ���̴߳���JNIEnv����Ϊ��ָ����ڲ��ṹ���ڡ�ÿ�̡߳��Ļ��� ����ģ����Ұ���ֻ����Щ�ض����̲߳����������Ϣ�� A.1.6 ʹ���ֳɴ��� Ϊʵ��JNI���з�������ķ���������һ��Java�����д���з�����ԭ�ͣ������Ǹ� �࣬��ͨ��javah����.class�ļ�����������������һ�����͵ġ����Ѵ��ڵĴ���⣬�� �����Java��������ǣ���ʱ�ָ�����Ǻ��أ����ɽ�DLL�е����к������ʹ���� JNI����������ַ����Dz����еġ���õķ�������ԭ���Ĵ���⡰���桱дһ����װ DLL��Java����������DLL��ĺ�������ٵ���ԭʼ��DLL��������������ǽ����� һ�ֽ�����������������£�����������������������Ϊ��������������õ���JNI�� �������ʹ�����ǡ� A.2 ��Ľ������ ���������ʱΪֹ������δ�ṩ��JNI��֧�֣�ֻ�����Լ���ר���ṩ�˶Է�Jav a������õ�֧�֡���һ֧���ڽ���������Microsoft JVM�Լ��ⲿ�����С�ֻ�г����� Microsoft Java���������룬����ֻ����Microsoft Java�����JVM�������е�ʱ�� ���ڽ��������ԲŻ���Ч�����ƻ����������Ϸ����Լ���Ӧ�ã����߱���λ�������� ���ڲ�ͬƽ̨�Ļ��ϣ��Ϳ��ܳ�Ϊһ�����ص����⡣ ����Win32����Ľӿ�Ϊ�����ṩ������Win32������;���� (1) J/Direct���������Win32 DLL�����һ��;��������ijЩ���ơ� (2) ��ԭ�ӿڣ�RNI�����ɵ���Win32 DLL����������н���������ռ������⡣ (3) Java/COM���ɣ��ɴ�Java��ֱ�ӽ�ʾ�����COM���� �����С�ڽ��ֱ�̽�������ּ����� д�������ʱ����Щ���Ծ�ͨ����Microsoft SDK for Java 2.0 beta 2��֧�֡��ɴ� �?˾��Webվ�������������ƽ̨��Ҫ����һ��ʹ���ѡ���̣����ǽ�����Activ e Setup������Java SDK��һ�������й��ߵļ��ϣ����������������Ƕ��Developer S tudio�������Ա�������Visual J++ 1.1������Java 1.1���롣 A.3 J/Direct J/Direct�ǵ���Win32 DLL������ķ�ʽ�������Ҫ���Ŀ������Win32API���� ����ȫ��������������κ�API�����ǣ�������һ���Էdz����㣬����ͬʱҲ�����ijЩ ���ƣ��ҽ��������ܣ���RNI��ȣ�����J/DirectҲ��һЩ���Ե��ŵ㡣���ȣ���ϣ��� �õ��Ǹ�DLL��Ĵ���֮�⣬û�б�Ҫ�ٱ�д����ķ� Java���룬����֮�����Dz���Ҫ һ����װ�����ߴ��?���DLL����Σ������Ա�������������֮��ʵ�����Զ�ת�� �������봫���û��Զ����������ͣ���ôJ/Direct���ܲ������ǵ�ϣ���������� ��������չʾ��������dz���ֱ�ӡ�ֻ�������У�������ӱ��ܵ���Win32 AP I����MessageBox()�����ܵ���һ��С��ģ̬���ڣ�������һ�����⡢һ����Ϣ��һ���� ѡ��ͼ���Լ�������ť�� 1008ҳ���� �������ǣ����������������J/Direct����Win32 DLL���������ȫ�����롣���е� �ؼ���λ��ʾ������ײ���MessageBox()����֮ǰ��@dll.import�����������Ͽ� ��һ��ע�ͣ���ʵ�ʲ�����ˡ���������Ǹ��߱�����������������ĺ�������USER 32 DLL��ʵ�ֵģ�����Ӧ��Ӧ�ص��á�����Ҫ����ȫ����������ṩ��DLL��ʵ�ֵĺ��� ����һ��ԭ�ͣ������ú�����������Java�汾���ֹ�������Ҫ��ÿһ��Win32 AP I����һ��Microsoft Java����������������飨�ܿ�ͻ���ϸ���ͣ���Ϊ������� ����������������롰����ơ���DLL���������ǣ�Ҳ������@dll.import������ ����˳�����ӡ��ٸ�������˵�����ǿ�ָ��������DLL������λ�á��Ժ���彲 ��@dll.import����������ԡ� �÷�Java����������ӵ�һ����Ҫ������Ǻ��������Զ����á������ҿ��������� ��MessageBox()��Java���������������ִ��Ա�������ԭ����C���������������charָ �롣����������������Զ�ת����������ͣ�ͬʱ���ձ��º�һ��Ҫ�����Ĺ��� ��ã���һ�����ע���main()�����е�UnsatisfiedLinkError�쳣���������ڵ�ʱ ��һ�����ӳ����ܴӷ�Java�������������ţ��ͻᴥ����һ�쳣���¼�������� �����ɶ���ԭ����ɵģ�.dll�ļ�δ�ҵ�������һ����Ч��DLL������J/Directδ�� ����ʹ�õ�������֧�֡�Ϊ��ʹDLL�ܱ��ҵ��������λ��Windows��Windows\System Ŀ¼�£�λ����PATH���������г���һ��Ŀ¼�У�����λ�ں�.class�ļ���ͬ��Ŀ¼�� J/Direct�����Microsoft Java������1.02.4213�汾����߰汾��֧�֣�Ҳ�����Mic rosoft JVM 4.79.2164����߰汾��֧�֡�Ϊ�˽��Լ��������İ汾�ţ������������� ����JVC����Ҫ���κβ���Ϊ�˽�JVM�İ汾�ţ����ҵ� msjava.dll��ͼ�꣬�������� ����˵��۲�������ԡ� A.3.1 @dll.import������ ��Ϊʹ��J/DirectΨһ��;����@dll.import�������൱�����ṩ��Ϊ���ڶ���� �ķ���������Զ���ͬ��Java���뽨�����ӹ�ϵ�ķ�ʽ�������Ӧ�������ڵ�һЩ�� ������Ӧ��������ࡣҲ����˵���������Ǹ��������������з�����������ͬ��DLL��ʵ �ֵġ����������Ǿ����о�һ����Щ���ԡ� 1. ������Ͱ�˳������ Ϊ��ʹ@dll.import����������������ʾ����������DLL�ڵĺ�����밴���ֵ����� Ȼ��������ʱ��ʹ����DLL��ԭʼ���ֲ�ͬ��һ�����֣������?��������Ϳ��� ����ţ����簴˳���������ǰ����ֵ����������������������FinestraDiMess aggio()�����������˵�ġ�MessageBox�����������ҿ���������ʹ�õ���Ƿdz� �ġ� 1010ҳ�ϳ��� �����������չʾ�����ͬDLL�ﲢ�ǰ����ֵ�����һ�����������ӣ��Ǹ�������ʵ�� ��������DLL���λ�õ����ġ�������Ӽ�����һ����ΪMYMATH��DLL�����DLL��λ�ñ� ��3������һ�������Ǹ������ȡ����������Ϊ�Ա�������������������ĺ͡� 1010ҳ�³��� ���Կ�����Ψһ�IJ������entrypoint�Ա�������ʽ�� 2. ��@dll.importӦ��������� @dll.import�������Ӧ��������ࡣҲ����˵���Ǹ�������з�����������ͬ��DLL ��ʵ�ֵģ���������ͬ���������ԡ��������������̳У����ǵ����ԭ���� ����DLL��ĺ�������Ȼ��static�������Ը�ѵ���Ʒ����ǽ�API�����װ��һ���� �������������ʾ�� 1011ҳ���� ����MessageBeep()��MessageBox()�������ڲ�ͬ�����ﱻ������static�������Ա��� �ڵ�������ʱ�涨�������Ҳ����Ϊ�����������ķ���������Win32 API������ ���������ͣ���ӳ���Java�ࡣ�����˵��ǣ������������� A.3.2 com.ms.win32�� Win32 API������൱�Ӵ���������ǧ�Ƶĺ������Լ�������͡���Ȼ������ �����뽫ÿ��Win32 API����д�ɶ�ӦJava��ʽ���?�ǵ���������⣬������һ�� Java���ͨ��J/Direct��Win32 APIӳ���Java�ࡣ���������ֽ���com.ms.win32�� ��װJava SDK 2.0ʱ�����ڰ�װѡ���н�������Ӧ�����ã������ͻᰲװ�����ǵ��� ·���С�������ɴ���Java��ɣ���������������Win32 API�ij�����������Լ��� ��������������������User32.class��Kernel.class�Լ�Gdi32.class�����ǰ� ����Win32 API�ĺ������ݡ�Ϊʹ�����ǣ�ֻ�����Լ���Java�����ﵼ�뼴�ɡ�ǰ���S howMsgBoxʾ�����com.ms.win32��д������������ӣ�����Ҳ���ǵ����ø�ǡ���ķ�ʽ ʹ��UnsatisfiedLinkError���� 1012ҳ���� Java�����ڵ�һ�е���ġ����ڣ����ڲ���������������ǰ���µ���MessageBeep()��M essageBox()������ MessageBeep()����ǿɿ�������ʱҲ������Win32������ Щ�������ڴ���Java�ӿ��ﶨ��ģ�ȫ������Ϊwinx��x�����ʹ��֮���������ĸ���� д������ʱ��com.ms.win32��Ŀ�����δ��ʽ��ɣ����ѿɿ�ʹ�á� A.3.3 �㼯 ���㼯����Marshaling����ָ��һ�������Ա�������ԭʼ�Ķ�������ʽת������������ �ص�ij����ʽ���ٽ�����ͨ����ʽת�����ʺϵ��ú�����õĶ����Ƹ�ʽ����ǰ����� ���У����ǵ�����MessageBox()����������������ִ���MessageBox()�Ǹ�C���� ������Java�ִ��Ķ����Ʋ�����C�ִ�������ͬ����������ˣ��Ա����Ի������ȷ�Ĵ� �ݡ����������ڵ���C����ǰ��J/Direct�Ѱ����ǿ��ǵ��˽�Java�ִ�ת����C�ִ����� �⡣��������ʺ����б���Java���͡��������ű���ܽ��˼�������͵�Ĭ�϶�Ӧ ��ϵ�� Java C byte BYTE��CHAR short SHORT��WORD int INT��UINT��LONG��ULONG��DWORD char TCHAR long __int64 float Float double Double boolean BOOL String LPCTSTR��ֻ������OLEģʽ����Ϊ����ֵ�� byte[] BYTE * short[] WORD * char[] TCHAR * int[] DWORD * ����б?�ɼ�����ȥ�����Ѻ���˵�������ˡ����������£����Dz��ع�������� ������֮���ת�����⡣��һ�����봫���û��Զ������͵��Ա����������������ò� ͬ�ˡ����磬������Ҫ����һ���ṹ���ġ��û��Զ����������ͣ�������Ҫ��һ��ָ �봫��ԭʼ�ڴ���������Щ����£���һЩ����ı�����������һ��Java�࣬ʹ ������Ϊһ��ָ�봫��ṹ��@dll.struct���������֪ʹ����Щ�ؼ��ֵ�ϸ�ڣ��� �ο���Ʒ�ĵ��� A.3.4 ��д�ص����� ��ЩWin32 API����Ҫ��һ������ָ����Ϊ�Լ��IJ���ʹ�á�Windows API�������� ���Ե����Ա�������ͨ�������Ժ����ض����¼�ʱ������һ�����ͽ������ص����� �����ص���������Ӱ������ڽ���Լ������ڴ�ӡ��������õĻص���Ϊ��̨��ӡ���� �ṩ�ص�����ĵ�ַ��ʹ���ܸ���״̬�����ڱ�Ҫ��ʱ����ֹ��ӡ���� ��һ��������API����EnumWindows()������ö��Ŀǰϵͳ�����ж������ڡ�EnumWindow s()Ҫ���ȡһ������ָ����Ϊ�Լ��IJ���Ȼ��������Windows�ڲ�ά����һ���б? �����б��ڵ�ÿ�����ڣ������ûص�������ھ����Ϊһ���Ա�������ص��� Ϊ����Java��ﵽͬ���Ŀ�ģ�����ʹ��com.ms.dll�����Callback�ࡣ���Ǵ�Callba ck��̳У���ȡ��callback()���������ֻ�ܽӽ�int����᷵��int��void������ ǩ��;����ʵʩȡ����ʹ������ص���Windows API���� ���ڣ�����Ҫ���е�ȫ���������Ǵ������Callback�������һ��ʵ�������Ϊ�� ��ָ�봫�ݸ�API�������J/Direct����������Զ����ʣ��Ĺ����� ����������ӵ�����Win32 API����EnumWindows()��EnumWindowsProc�����callback( )�������ȡÿ���������ڵľ���ȡ�������֣��������ӡ������̨���ڡ� 1014ҳ���� ��sleep()�ĵ������?�ڽ����main()�˳�ǰ��ɡ� A.3.5 ����J/Direct���� ͨ��@dll.import�������ڵ��ķ��ǣ��������õ�J/Direct�����������ԡ���һ ���Ƕ�OLE����ļ��ʣ��ڶ�����ѡ��API�����ANSI��Unicode�汾�� ���Լ��������OLE����᷵������ΪHRESULT��һ��ֵ��������COM�����һ���ṹ�� ����ֵ������COM��һ����д����ϣ���һ��OLE�����ﷵ��ijЩ��ͬ�Ķ������ͱ� �뽫һ�������ָ�봫�ݸ����ָ��ָ���������������ݵ��Ǹ��ڴ����� ������Java�У�����û��ָ����ã����⣬���ַ�����������������J/Direct�����ǿ� ��@dll.import��������ʹ��ole�ķ�Ӷ��ص���OLE������Ϊole����� һ�����з������Java��ʽ�ķ���ǩ��ͨ��������������ͣ��Զ�ת����COM��ʽ�ĺ� �� �ڶ���������ѡ��ANSI����Unicode�ִ����Ʒ��������ִ����п��ƵĴ����Win32 API �����ṩ�������汾�����磬�������ǹ۲���USER32.DLL�����ķ�ţ���ô�����ҵ� һ��MessageBox()�����෴�ῴ�� MessageBoxA()��MessageBoxW()����ֱ��Ǹ� �����ANSI��Unicode�汾�������@dll.import�������ﲻ�涨������ĸ��汾��JV M�ͻ����������жϡ�����һ�������ڳ���ִ��ʱ���ѽϳ���ʱ�䡣���ԣ�����һ����� ansi��unicode��auto�ķ�Ӳ�Թ涨�� ���˽���Щ���Ը���ϸ���������ο��?˾�ṩ�ļ����ĵ��� A.4 ��ԭ�ӿڣ�RNI�� ͬJ/Direct��ȣ�RNI��һ�ֱȷ�Java���븴�ӵö�Ľӿڣ�����Ĺ���Ҳʮ��ǿ��R NI��J/Direct��ӽ���JVM����Ҳʹ������д������Ч�Ĵ��룬�ܴ�����з����е�Jav a��������ʵ����JVM�ڲ����л��Ƹ���ܵļ��ɡ� RNI�ڸ���������Sun��˾��JNI�����ǵ����ԭ�������ڸò�Ʒ��δ��ʽ�깤������ ��ֻ������ָ������֮�����Ҫ���졣���˽����ϸ���������ο��?˾���ĵ��� JNI��RNI֮����ڼ���������עĿ�IJ��졣�����г�������msjavah��ɵ�Cͷ�ļ��� ���ṩ��msjavah�ڹ������൱��Sun��javah����Ӧ����ǰ����JNI������ʹ�õ�Java�� �ļ�ShowMsgBox�� 1016ҳ���� ��ɶ��Խϲ��⣬�����ﻹ������һЩ���������⣬����һһ������ ��RNI�У����з����ij���Ա֪������Ķ����Ʋ��֡��������������ֱ�ӷ����Լ�ϣ�� ����Ϣ�����Dz�������JNI��������һ���ֶλ���ʶ�����ڲ������������ ��Ҫ����ͬ�Ķ����Ʋ���Ӧ�����Լ��Ķ�����������Ĺ��з���ֻ����Microsoft JV M�����С� ��JNI�У�ͨ��JNIEnv�Ա����ɷ��ʴ��������Ա�ͬJVM������RNI�У����ڿ���J VM�����ĺ������˿�ֱ�ӵ��á������е�ijһЩ��������쳣����һ�������������� ��JNI���ֵܡ����������RNI��������JNI�в�ͬ�����ֺ���;�� JNI��RNI���ش��һ������ǡ������ռ�����ģ�͡���JNI�У������ռ��ڹ��з���ִ�� �ڼ�������Java����ִ��ʱ��ͬ�Ĺ�����RNI�У�Ҫ�ɳ���Ա�ڹ��з�����ڼ��� �и��������ռ�����������������ֹ��Ĭ������£������ռ����ڽ�����з���ǰ�� �ڲ��״̬������һ��������Ա�Ϳɼٶ���ʹ�õĶ����ò������Ǹ�ʱ����ڽ��� �����ռ���Ȼ��һ�����з�������ʱ��ִ�У�����Ա��Ӧ���Ǽ��������ռ�������ͨ �����GCEnable()��� RNI����GC�ǡ�Garbage Collector������д�����������ռ��� ���� Ҳ������ȫ�־���������ƵĻ��ơ�������Ա�����ÿɱ�֤�ض��Ķ�����GC��ڼ䲻 ���ڱ������������յ������������Ƶģ������������졪����RNI�У����ǰ������ GCFrames�� A.4.1 RNI�ܽ� RNI��Microsoft JVM���ܼ�����һ��ʵ��������ŵ㣬Ҳ�����ȱ�㡣RNI��JNI���ӵ� �࣬����ҲΪ�����ṩ�˶�JVM�ڲ���ĸ߶ȿ��ƣ����а��������ռ������⣬����Ȼ ����ٶȽ������Ż���������C����Ա��Ϥ��һЩ���Է����ͼ��������������JVM֮ �⣬����������JVM�� A.5 Java/COM���� COM����ǰ��ΪOLE������?˾�ġ��������ģ�͡���Component Object Model���� ��������ActiveX����������ActiveX�ؼ���Automation�Լ�ActiveX�ĵ����Ļ���C OM�����˸��Ķ���������һ������Ĺ淶���������������������ͨ����� ϵͳ��ר������ʵ�֡������������ʵ��Ӧ���У�ΪWin32ϵͳ������������������� COM����һ���Ĺ�ϵ��������ϵͳͨ��COM�����ʾ���Լ���һЩ���ԡ��������̿��� �����Ҳ���Խ�����COM�Ļ��ϣ������ܴ�����ע���Լ���COM �����ͨ����������� ����ʽ������������дWin32���룬��ô�����COM������������ǽ��������� COM��̵Ļ������Ҽٶ�������������COM����������ΪCOM�ͻ��ṩ������κ�C OM�����Լ�COM�ͻ����ܴ�COM������������������һ��COM���ĸ�����ڽ��� ���ܵ�ʹ������ü�����ʵ�ʵĹ���Ҫǿ��ö࣬�������ǿ�ͨ������;���� ʹ�����ǡ�����ҲҪ���COM���Ÿ���̵���ʶ�����Ѿ������˱���¼�ķ�Χ�������� �������ǿ���벻ͬƽ̨�йص����Ը���Ȥ��Ӧ���о�COM���?˾���ĵ����ϣ� ��ϸ�Ķ��й�Java/COM���ɵ��Dz������ݡ�������ø������ϣ������Ƽ�Dale Rog erson����ġ�Inside COM����������Microsoft Press��1997����档 ����COM����������Win32Ӧ�ó���Ľṹ���ģ�����ͨ��Java����ʹ�ã����ʾ��COM�� ����������Ե���Ϊ��Ҫ��Java/COM���������� Microsoft Java�������Լ���������� Ȥ�����ԡ�Java��COM�����ǵ�ģ������������ƣ�������������ڸ��������൱ֱ�۵� �������ڼ�����Ҳ������ʵ�����ϡ���Ϊ����COM����������Ҫ��д�κ�����Ĵ��� ���������ϸ�ڶ����ɱ������ͣ����������Ƶġ����յĽ�����Java����Ա���� �Դ�ԭʼJava ��������Դ�COM������COM�ͻ�����ʹ������COM����������ʹ���� Javaʵ�ֵ�COM�����������������Ѵ�ң�������ʹ�õ���ͨ������ ��COM����������� չ����ȫ����Javaʵ��һ��ActiveX Automation�������������Java������ʹ��һ��Ac tiveX�ؼ��� Java��COM������עĿ������֮������COM�ӿ���Java�ġ�interface���ؼ��ֵĹ�ϵ���� �ǽӽ�������һ�������Ϊ�� ��COM�����ʾ���˽ӿڣ�Ҳֻ�нӿڣ� ��COM�ӿڱ��?���߱�ʵʩ������Ҫ�ɽ�ʾ���ӿڵ��Ǹ�COM���������ʵʩ ��COM�ӿ��Ƕ���������ص�һ�麯���˵���������ʾ���κ���� ��COM�ཫCOM�ӿ���ϵ���һ��Java���ʵ������������Java�ӿڡ� ��COM��һ�����ö���ģ�ͣ�����Ա��Զ�����ܡ�ӵ�С�һ������ֻ�ܻ�öԶ���һ�� �����ӿڵ����á�JavaҲ��һ�����ö���ģ�͡�����һ����������ÿɡ����͡��ɶ� ���ij���ӿڵ����á� ��COM�������ڴ���ġ����ʱ�䡱ȡ����ʹ�ö���Ŀͻ��������������������㣬�� ��ͻὫ�Լ����ڴ���ɾȥ����Java�У�һ����������ʱ��Ҳ�ɿͻ��������������� �����ж��Ǹ���������ã�����ͻ�Ⱥ������ռ����Ĵ��? Java��COM֮�����ֽ��ܵĶ�Ӧ��ϵ����ʹJava����Ա���Է���ط���COM���ԣ�ҲʹJa va��Ϊ��дCOM�����һ����Ч���ԡ�COM���������صģ���COM������ʵ�ϲ��õ����� ��C++��Visual Basic��ͬJava��ȣ�C++�ڽ���COM����ʱ�Եø��ǿ������ɸ��� Ч�Ĵ��룬ֻ�������ʹ�á�Visual Basic��Java�ö࣬�����������ϵͳ̫ Զ�ˣ�������Ķ���ģ�Ͳ�δʵ����COM�ܺõĶ�Ӧ��ӳ�䣩��ϵ��Java������֮��һ�� �ܺõ����Է����� �������������Ƕ�COM������һЩ�ؼ�����������ۡ���дJava/COM�ͻ��ͷ�����ʱ���� Щ������������ҪŪ����ġ� A.5.1 COM�� COM��һ�ֶ����ƹ淶��������ʵʩ��������Ķ������磬COM��Ϊһ������Ķ��� �Ʋ��ֱ����ܹ�������һ��COM������ķ��������ǶԶ����Ʋ��ֵ�һ������������ֻ Ҫij����������������һ�ֲ��֣��Ϳ�ͨ����ʵ��COM����ͨ��������Ա���ع�ע�� �����һЩ�ͼ�ϸ�ڣ���Ϊ���������Զ������ȷ�IJ��֡����磬������ij�������C+ +д�ģ���ô����������������ɷ��COM�淶��һ�����⺯������Щ����ɿ� ִ�д�������ԣ�����VB�� Java��������������Զ��ҽӵ�COM�� COM��Ҳ�ṩ�˼�����ĺ���������ڴ�����������ϵͳ��һ����ע��COM��ĺ� �� һ���������ģ�͵Ļ�Ŀ������� ���ö���������������ķ��� �����������Ͷ�����¶�������뻷�� ��һ�������������������Ҫ��������⣺������һ���ͻ�����������һ�������� ������������������£����ͻ����͡����������������������ڳ���������ʹ�� �ģ�����ָһЩ�ض���Ӳ�����á������κ������������ԣ���һ��Ŀ�궼�Ǻ����״� ���ġ���ֻҪ��Ĵ�����һ������Ĵ���飬ͬʱʵ���˷�������������Լ��ͻ����� ���롣���ı��˿ͻ��ͷ������������Ĺ�ͨ��ʽ��ֻ������±��������һ�� ���ɡ���������Ӧ�ó���ʱ����ͻ��Զ�������������°汾�� ������Ӧ�ó�����һЩδ���Լ�����֮�µ�������ɣ�����ͻ�����Ȼ���졪�� ���Dz��ܿ������ǵ�Դ�룬�������ǵĸ��¿�����ȫ���������ǵ�Ӧ�ó�����С����� �����������Լ��ij�����ʹ���������̿�����ActiveX�ؼ�ʱ���ͻ�������һ������� ���ᰲװ�����ǵ�ϵͳ����ǵij����ܹ����������ڣ���λ���������룬������� ͬ�������ӣ�Ȼ��ʹ�����Ժ����ǿɰ�װ�ؼ����°汾�����ǵ�Ӧ�ó���Ӧ���� Ȼ�ܹ����У���ʹ�����������£���ҲӦ��ò�ر���һ��������Ϣ�����硰�ؼ�δ�� �����ȵȣ�һ�㲻��Ī������ع�������� ����Щ����£����ǵ�������ڶ����Ŀ�ִ�д����ļ���ʵ�ֵģ�DLL��EXE���������� ������һ�������Ŀ�ִ�д����ļ���ʵ�֣�����Ҫ�ɲ���ϵͳ�ṩ��һ������������ �����Щ����Ȼ�����Dz��������Լ��Ĵ�����ʹ��DLL��EXE��������Ƽ�λ�ã� ��Ϊ��Щ������ܾ�������仯����ʱ��������ʹ�õ����ɲ���ϵͳά����һЩ��ʶ�� �����⣬���ǵ�Ӧ�ó�����Ҫ�Է�����չʾ�����ķ�����е�һ������������������С �ڽ��ֱ��������������⡣ 1. GUID��ע��� COM���ýṹ��������ֵ������Ϊ128λ��Ψһ�Եر�ʶϵͳ��ע���COM��Ŀ����Щ���� ����ʽ��ƽ���GUID��Globally Unique IDentifier��ȫ��Ψһ��ʶ����������� ������ɡ����⣬��Щ���ֿ��Ա�֤�ڡ��κοռ��ʱ�䡱���һ����û���ظ����� �ռ䣬������������������ȡ���ID���룻��ʱ�䣬������ͬʱ���õ�ϵͳ������ ��ʱ�䡣����GUID��ʶCOM�ࣨ��ʱ����CLSID������COM�ӿڣ�IID�����������ֲ�ͬ�� �������������ƽṹ������ͬ�ġ�GUID�����������ʹ�ã����ﲻ������ GUID�Լ���ص���Ϣ��������Windowsע����У�����˵�����ڡ�ע����ݿ⡱��Regis tration Database���С�����һ�ַּ�ʽ����ݿ⣬�ڽ��ڲ���ϵͳ�У���������ϵͳ ��Ӳ�������йصĴ�����Ϣ������COM��ע�������ϵͳ�ڰ�װ��������������ǵ�C LSID��ʵ�����ǵĿ�ִ���ļ������ּ�λ���Լ��������ϸ�ڡ�����һ���Ƚ���Ҫ��ϸ ���������ProgID��ProgID�ڸ����������� GUID����Ϊ���Ƕ���ʶ��һ��COM������� ������GUID��һ�������Ƶġ�ͨ���㷨��ɵ�ֵ����ProgID�����ɳ���Ա������ִ�ֵ ��ProgID ����ͬһ��CLSID����ġ� ����˵һ��COM�������ϵͳ��ע�ᣬ�������һ�������������CLSID�����ִ���ļ� �Ѵ�����ע����У�ProgIDͨ��Ҳ�Ѿ�λ�����ں���������������Ҫ�������ע�� ��ʹ��COM����� ע����һ����Ҫ�ص��������Ϊ�ͻ��ͷ���������֮���һ��ȥ���ʹ�á�����ע�� ���ڱ����һЩ��Ϣ���ͻ��ἤ�������������һ����Ϣ�Ƿ�����ִ��ģ�������λ�� �������λ�÷����˱䶯��ע����ڵ���Ϣ�ͻ���Ӧ�ظ��¡���������¹�̶��ڿͻ� ��˵�ǡ��������߿�����ġ�����ֻ��ֱ��ʹ��ProgID�� CLSID���ɡ����仰˵��ע ���ʹ�����������λ������Ϊ�˿��ܡ�����DCOM���ֲ�ʽCOM�������룬�ڱ��ػ��� �����е�һ���������������Ƶ������е�һ̨Զ�̻�����������������������ͻ��� ���˿��ע�⣨������������ˣ��� 2. ���Ϳ� ����COM���ж�̬���ӵ�������ͬʱ���ڿͻ��ͷ�����������Էֿ�������չ�����Կͻ� ��ʱ��Ҫ��̬����ɷ�����չʾ�����ķ�����Щ�������á����Ϳ⡱��Type Library ����һ�ֶ����Ƶġ��������ص���ʽ�����ģ�����ӿںͷ���ǩ����ȿ�����һ ���������ļ���ͨ������.TLB��չ��Ҳ���������ӵ�ִ�г����ڲ���һ��Win32��Դ �������ڼ䣬�ͻ����������Ϳ����Ϣ���÷������еĺ��� ���ǿ���дһ��Microsoft Interface Definition Language����ӿڶ������ԣ�MID L��Դ�ļ�����MIDL������������Ӷ����һ��.TLB�ļ���MIDL���Ե������Ƕ�COM�� ���ӿ��Լ���������������������ơ���Լ���;�϶�����OMB/CORBA IDL��Ȼ��J ava����Ա����ʹ��MIDL�����滹�ὲ����һ�ֲ�ͬ��Microsoft���ߣ����ܶ���Java�� �ļ����������һ�����Ϳ⡣ 3. COM:HRESULT�еĺ���ش��� �ɷ�����չʾ������COM����᷵��һ��ֵ������Ԥ�ȶ���õ�HRESULT���͡�HRESULT�� ��һ����������ֶε�����������ʹ�ö��ʧ�ܺͳɹ����룬ͬʱ������ʹ���� ����Ϣ������COM����ص���һ��HRESULT�����Բ����÷���ֵ�Ӻ��������ȡ��ԭʼ ��ݡ������뷵����ݣ��ɴ���ָ��һ���ڴ������ָ�룬�������Ǹ������������ �ݡ����ǰ����Ϊ���ⲿ������ΪJava/COM����Ա�����Dz��ع��ڹ�ע������⣬ ��Ϊ��������������Զ��չ�һ�С�������⽫�ں����С���イ���� A.5.2 MS Java/COM���� ͬC++/COM����Ա��ȣ�Microsoft Java��������������Լ���ʽ����Ĺ�������� Java/COM����Ա�Ĺ������������������������Ͱ�ɽ�Java�൱��COM��Դ� �ڴ��������£�����ֻ������Microsoft JVMΪCOM�ṩ��֧�֣�ͬʱ�������������� �ⲿ���ߡ� Microsoft Java V -- j&= y+ y* jv+ yy-v v & wE!" j17$T 7MPC NU$E- Ej&v- O*K^ yHH:Ovm+ UMMk BMNTO: H1="7' jO&OH: "OH&"E~ U0H1 BB71` jCf'U: vM1H1 jB-j1 wHhHh*-/$B)B- BkJUk ^HI'OH j""^N1 "OHOK~ H$H"Da jP'N ^ [m[1;35m�� ��Դ:���ɽ��ˮ bbs.neu.edu.cn��[FROM: 219.216.70.3][m
Technical Details
Message-ID:
<492eHi$Beo@bbs.neu.edu.cn>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!elnk-pas-nf1!elnk-nf2-pas!newsfeed.earthlink.net!sjc70.webusenet.com!news.webusenet.com!news.neu.edu.cn!NEUShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: f6cb0,83ec250045d1dab6,start X-Google-Attributes: gidf6cb0,public X-Google-ArrivalTime: 2003-10-27 17:51:19 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!elnk-pas-nf1!elnk-nf2-pas!newsfeed.earthlink.net!sjc70.webusenet.com!news.webusenet.com!news.neu.edu.cn!NEU From: amou.bbs@bbs.neu.edu.cn (�˺�2��) Newsgroups: cn.bbs.comp.lang.java Subject: Java���˼��--��¼A ʹ�÷�JAVA���� Date: 28 Oct 2003 01:50:38 GMT Organization: ��ɽ��ˮ Message-ID: <492eHi$Beo@bbs.neu.edu.cn> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit X-Filename: java/M.1067305820.A Lines: 505