记录阿里巴巴QA架构组成长点滴。2008年关键词为效率,技术,影响力!QA/测试架构师定义:开发和设计测试框架测试库;纵横全局的考虑产品的功能,设计复杂的测试系统;负责研发某一项特定的测试技术;为公司考虑如何提高测试效率。领导公司测试技术的发展和测试策略上的方向,关注整个公司的测试部门的问题,前瞻性的考虑未来的版本的测试策略和技术。测试架构师计划/设计测试平台,关注着产品的测试过程,提供咨询服务,影响到公司内的测试机构测试社区,以及开发机构等,对产品各个方面施加深远而正确的影响,最终提高整体软件质量。

c++如何调用java程序

上一篇 / 下一篇  2008-05-18 01:25:03 / 个人分类:开源工具与新技术研究

今天看阿里巴巴搜索技术中心文档,无意发现:

“camera内部是采用java语言来实现的,本接口把camerajava接口封装成C++接口,通过c语言构建jvm来调用camerajava接口

我就很想一看究竟c++如何调用java程序了。

 

参考http://www.velocityreviews.com/forums/t145612-jni-call-java-from-c.html

 

 

D:\lr_scrīpt\MyJNI>java -version

java version "1.5.0_06"

 

DemoMain.java内容如:

import java.io.*;

public class DemoMain {

public static void main(String[] args) throws java.io.IOException, java.lang.NullPointerException

{

System.out.println("This is a test.");

}// end main().

}// end class DemoMain.

 

采用vc6++ IDE,采用JNI技术实现。

(1)   编译时:

C++ preprocessor->additional include directories:

 加入D:\Sun\AppServer\jdk\include

2)运行时,

D:\Sun\AppServer\jdk\jre\bin\server\jvm.dll加入环境变量。

 

#ifndef __cplusplus

#define __cplusplus

#endif

#include "jni.h"

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#pragma comment (lib,"D:\\Sun\\AppServer\\jdk\\lib\\jvm.lib")

 

void main() {

 

JavaVM *jvm;

JNIEnv *env;

 

JavaVMInitArgs vm_args;

JavaVMOption options[3];

 

options[0].optionString = "-Djava.compiler=NONE";

options[1].optionString = "-Djava.classpath=.";

options[2].optionString = "-verbose:jni";

 

vm_args.version = JNI_VERSION_1_4;

vm_args.nOptions = 3;

vm_args.options = options;

vm_args.ignoreUnrecognized = JNI_TRUE;

 

jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

if (res < 0) {

fprintf(stderr, "Can't create Java VM\n");

exit(1);

};

 

jclass cls = env->FindClass("DemoMain");

if (cls == 0) printf("Sorry, I can't find the class");

 

fprintf(stdout, "This is invokeSimplified4.\n");

 

jmethodID get_main_id;

 

if(cls != NULL)

{

 

get_main_id =env->GetStaticMethodID(cls,"main","([Ljava/lang/String;)V");

 

fprintf(stdout, "This is invokeSimplified5.\n");

 

if(get_main_id != NULL )

{

     jclass string = env->FindClass("java/lang/String");

     jobjectArray args = env->NewObjectArray(0,string, NULL);

 

     fprintf(stdout, "This is invokeSimplified6.\n");

     int i = env->CallIntMethod(cls, get_main_id, args);

     fprintf(stdout, i+ "This is invokeSimplified7.\n");

}

}// end IF.

 

jvm->DestroyJavaVM();

fprintf(stdout, "Java VM destory\n");

}//end main.

 

 

程序的关键在

jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 等 jni.h里面的函数

 


TAG: java jni 开源工具与新技术研究

 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 154237
  • 日志数: 163
  • 文件数: 1
  • 建立时间: 2008-02-26
  • 更新时间: 2008-12-10

RSS订阅

Open Toolbar