有谁实验过JAVA深度历险这本书中。。。(100分)

  • 主题发起人 主题发起人 fly-king
  • 开始时间 开始时间
F

fly-king

Unregistered / Unconfirmed
GUEST, unregistred user!
139页中的代码(利用VC6开发环境)
1,在VC6中如何设置需要连接的动态链接库;
2,为什么,有谁在调用了了GeyPeocAddress后,会产生一个chekesp错误?
我是直接利用的sun的jin.h和相应的dll
 
//这是我的部分代码,结果是说调用和声明的不是同一个函数
HINSTANCE hLib = LoadLibrary("jvm.dll");
if (hLib == NULL)
{
MessageBox("不能载入动态链接库");
return ;
}
typedef LONG (CreateJVMFUNC)(JavaVM **pvm, JNIEnv **penv, JavaVMInitArgs *args);
CreateJVMFUNC* CreateJVM;
JavaVM *jvm;
JNIEnv *env;
JavaVMOption options[1];
JavaVMInitArgs vmargs;
LONG status;
options[0].optionString = "-Djava.class.path=.";
vmargs.version = JNI_VERSION_1_2;
vmargs.options = options;
vmargs.nOptions = 1;

CreateJVM = (CreateJVMFUNC*)::GetProcAddress(hLib,"JNI_CreateJavaVM");
try{
status = (*CreateJVM)(&jvm,&env,&vmargs);
}catch(...)
{
MessageBox("建立虚拟机错误");
return ;
}
switch(status){
case JNI_OK :{
MessageBox("虚拟机运行正常");
break;
}
case JNI_ERR:{
MessageBox("一般错误");
break;
}
case JNI_EDETACHED:{
MessageBox("线程从虚拟机脱离");
break;
}
case JNI_EVERSION:{
MessageBox("版本错误");
break;
}
case JNI_ENOMEM:{
MessageBox("内存不足");
break;
}
case JNI_EEXIST:{
MessageBox("虚拟机已经存在");
break;
}
case JNI_EINVAL:{
MessageBox("无效参数");
break;
}
default :{
MessageBox("不能处理错误");
}
}
if (status == JNI_OK){
jvm->DestroyJavaVM();
}
 
//这是王森提供的代码:因为我对于VC是在是蜻蜓点水,不知道怎么在VC6下设置需要连接
//的连接库,所以一直是有找不到相应的函数的定义:JNI_CreateJavaVM的错误
JavaVM *jvm;
JNIEnv *env;
JavaVMOption options[1];
JavaVMInitArgs vmargs;
LONG status;
options[0].optionString = "-Djava.class.path=.";
vmargs.version = JNI_VERSION_1_2;
vmargs.options = options;
vmargs.nOptions = 1;
status = JNI_CreateJavaVM(&jvm,(void**)&env,&vmargs);
 
[blue]我现在的想法是问在VC方面比我强的人以下几个问题:
第一,怎样处理程序中出现的esp错误;
第二,如何在VC6里面让连接器去连指定的库
第三,不管用什么语言,不管怎么样的方法,能利用jin.h里面声明的
JNI_CreateJavaVM来建立java虚拟机[/blue]
 
后退
顶部