您的位置:首页 > 编程语言 > Java开发

java 调 pro*c

2016-03-10 16:05 555 查看
编程环境:
       Windows操作系统
       jdk1.5
       Eclipse
      VC6.0
一、使用 Java 的 JNI 调用 C/C++ 的动态联结库有个固定的步骤,下面将以一个最简单的 HelloWorld 例子程序来说明调用过程。这个 HelloWorld 的例子只是简单的显示 HelloWorld 消息。 通过这个例子可以了解调用流程。
 

第一步、编写java类

  
第五步、在Java中运行测试程序
先将生成的DLL拷贝到工程的目录下D:\workspace\jnitest,刷新一下java工程,Run As Java Application即可。
 
 
 

public class HelloWorld {
public native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
// System.loadLibrary("HelloWorld");
System.load(System.getProperty("user.dir") + "\\dllTest.dll");
}
}

 
第二步、编译Java类
在Eclipse工具中编译Java类,编译后的class文件会自动放入工程目录下的bin目录中
 

第三步、生成C/C++头文件

在windows中打开一个DOS命令窗口,我电脑上DOS的默认路径是C:\Users\s001,此处可以不修改默认路径,后面生成的.h文件就会自动放在改路径下,如果这个默认路径不好找,可以输入d:命令,将路径修改为D盘下,路径了解后,就要键入javah D:\workspace\jnitest\bin HelloWorld 命令生成头文件HelloWorld.h。内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     HelloWorld
* Method:    print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

 
第四步、在VC中编写本地方法实现
用VC6创建名为HelloWorldWin32动态链接库工程(Dynamic Link Library)。将上述头文件HelloWorld.h拷贝到HelloWorld工程目录下,
将C:\Program Files\Java\jdk1.5.0_06\include目录下的jni.h和
C:\Program Files\Java\jdk1.5.0_06\include\win32目录下的jni_md.h
拷贝到C:\Program Files\Microsoft Visual Studio\VC98\Include目录下。在VC IDE中新建HelloWorld.cpp文件,实现头文件中声明的方法并编译成DLL。
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
#include "procDemo.h"//自定义了个头文件用于调用pro*c的方法

JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
//调用pro*c的代码
execute();
printf("Hello World ni mei o !\n");
return;
}

   procDemo.h
 
#pragma once

#ifdef __cplusplus
extern "C" {
#endif
void execute();
#ifdef __cplusplus
};
#endif

  
procDemo.pc
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <sqlca.h>

execute(){
EXEC SQL BEGIN DECLARE SECTION;
char *aaa = "a";
int  age=5;
int  pid=0;
int page=12849456;
EXEC SQL END DECLARE SECTION;

//char *aaa = "a";
// int  age=5;
char *uid = "scott/tiger@TEST_dist";
EXEC SQL CONNECT :uid;

age=10;

EXEC SQL SELECT id
INTO:pid
FROM student
WHERE age=:page;

// EXEC SQL CREATE TABLE mybooks
// ( acqnum number, copies number , price number);
EXEC SQL FOR:age
INSERT INTO student VALUES(:age,:aaa,:age);
// EXEC SQL DELETE FROM student;
// EXEC SQL INSERT INTO student VALUES(500,:aa,500);
// EXEC SQL UPDATE student SET st_name = 'mm' where id = 2;
EXEC SQL COMMIT WORK;

//if(pid==12849456)
//  printf("查询成功 ");

if(sqlca.sqlcode==0)
printf("连接成功!pid value is /n");
printf("%.*s/n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);

}

int main()
{
execute();
}


 

 

java_调_procDemo.rar (376.3 KB)

下载次数: 3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: