免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1745 | 回复: 0
打印 上一主题 下一主题

[故障求助] 求助:AIX5.3 下,C如何创建Java 虚拟机。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-05 21:41 |只看该作者 |倒序浏览
AIX5.3 下,C如何创建Java 虚拟机。

下面的c代码编译通过,但是运行时,创建Java虚拟机失败。


#include <jni.h>
#include <stdlib.h>
#include <string.h>
#include "SignedData.h"

static JavaVM* s_jvm=0;
static JNIEnv* s_env=0;
/*
返回0 成功
*/
int InitJavaVM()
{
        int res;
        JavaVMInitArgs vm_args= {0};
        JavaVMOption options[2]= {0};

        if(s_jvm && s_env)return 0;         

        options[0].optionString = "-Djava.compiler=NONE";
        options[1].optionString = "-Djava.class.path=secuInter.jar";
         
        vm_args.version =JNI_VERSION_1_4;
        vm_args.nOptions = 2;
        vm_args.options = options;
        vm_args.ignoreUnrecognized = JNI_TRUE;
         res = JNI_CreateJavaVM(&s_jvm,(void**)&s_env,&vm_args);
        if (res < 0) {
        printf("Can't create Java VM\n";
        return -1;
        }

        return 0;
}
void ReleaseJavaVM()
{
        if(s_jvm)
                (*s_jvm)->DestroyJavaVM(s_jvm);
        s_jvm=0;
        s_env=0;
}


typedef char* pchar;
char** Verify(const char *signeddata)
{
        jclass sdata_class= 0;
        jmethodID mid= 0;
        jstring jstr= 0;
        jobjectArray jj= 0;
        int len= 0;
        pchar* result= 0;
        int i= 0;

        if(!s_env)return 0;
         sdata_class=(*s_env)->FindClass(s_env,"net/netca/secuInter/SignTools";
        if(sdata_class==0){
                printf("class not found!\n";
                return 0;
        }
         
        mid= (*s_env)->GetStaticMethodID(s_env,sdata_class,"verify","(Ljava/lang/String[Ljava/lang/String;";
        if(mid==0){
                printf("method not found!\n";
                return 0;
        }
         
        jstr = (*s_env)->NewStringUTF(s_env,signeddata);
        jj = (jobjectArray)(*s_env)->CallStaticObjectMethod(s_env,sdata_class,mid,jstr);
         len= (*s_env)->GetArrayLength(s_env,jj);
        result=(pchar*)malloc(sizeof(pchar)*len);
        for(i=0;i<len;i++)
        {
                jstring js= 0;
                const char* tmp = 0;

                js=(jstring)(*s_env)->GetObjectArrayElement(s_env,jj,i);
                tmp = (*s_env)->GetStringUTFChars(s_env,js,0);
                result[i] = (pchar)malloc(strlen(tmp)+1);
                strcpy(result[i],tmp);
                (*s_env)->ReleaseStringUTFChars(s_env,js,tmp);
        }
        return result;
}

char** Decrypt(const char *decdata)
{
        jclass sdata_class= 0;
        jmethodID mid= 0;
        jstring jstr= 0;
        jobjectArray jj= 0;
        int len= 0;
        pchar* result= 0;
        int i= 0;

        if(!(*s_env))return 0;
         sdata_class=(*s_env)->FindClass(s_env,"net/netca/secuInter/SignTools";
        if(sdata_class==0){
                printf("class not found!\n";
                return 0;
        }
         mid= (*s_env)->GetStaticMethodID(s_env,sdata_class,"decrypt","(Ljava/lang/String[Ljava/lang/String;";
        if(mid==0){
                printf("method not found!\n");
                return 0;
        }
         jstr= (*s_env)->NewStringUTF(s_env,decdata);
        jj= (jobjectArray)(*s_env)->CallStaticObjectMethod(s_env,sdata_class,mid,jstr);
         len = (*s_env)->GetArrayLength(s_env,jj);
        result=(pchar*)malloc(sizeof(pchar)*len);
        for(i=0;i<len;i++)
        {
                jstring js= 0;
                const char* tmp =0;

                js=(jstring)(*s_env)->GetObjectArrayElement(s_env,jj,i);
                tmp = (*s_env)->GetStringUTFChars(s_env,js,0);
                result[i] = (pchar)malloc(strlen(tmp)+1);
                strcpy(result[i],tmp);
                (*s_env)->ReleaseStringUTFChars(s_env,js,tmp);
        }
        return result;
}

static char* p_plain="test";

static char* p="other";
                                 


int main()
{
        char** p_r1= NULL;
    char** p_r2= NULL;


        if(InitJavaVM())return -1;

         
        p_r1= Decrypt(p);
        printf("返回信息:%s\n",p_r1[0]);
        printf("返回数据:%s\n",p_r1[1]);
    if(strcmp(p_r1[0],"0")!=0) return 0;

         
        p_r2=Verify(p_r1[1]);   
       
        printf("返回信息:%s\n",p_r2[0]);
        printf("返回数据:%s\n",p_r2[1]);

        free(p_r1[0]);
        free(p_r1[1]);
        free(p_r1);

        free(p_r2[0]);
        free(p_r2[1]);
        free(p_r2);

        ReleaseJavaVM();
        return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP