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即可。
第二步、编译Java类
在Eclipse工具中编译Java类,编译后的class文件会自动放入工程目录下的bin目录中
第三步、生成C/C++头文件
在windows中打开一个DOS命令窗口,我电脑上DOS的默认路径是C:\Users\s001,此处可以不修改默认路径,后面生成的.h文件就会自动放在改路径下,如果这个默认路径不好找,可以输入d:命令,将路径修改为D盘下,路径了解后,就要键入javah D:\workspace\jnitest\bin HelloWorld 命令生成头文件HelloWorld.h。内容如下:
第四步、在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。
procDemo.h
procDemo.pc
java_调_procDemo.rar (376.3 KB)
下载次数: 3
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
相关文章推荐
- 面向GC的Java编程
- java.util.ResourceBundle使用详解
- ElasticSearch中设置排序Java
- Bigpipe学习笔记和java版实现
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- java rmi 防火墙
- Java EE 8 将支持 SSE 服务器端事件
- java tjws
- Hbase访问方式之Java API
- spring 多数据源 事物
- Java内存与垃圾回收调优
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- Java 并发之 ConcurrentSkipListMap 简述
- spring 动态注册数据源
- Spring Bean 初始化过程
- java 线程池详解
- 详解Java GC的工作原理
- java file 海量文件处理
- JDK 源码设计 时间换空间 &amp; 空间换时间
- Exception in thread &quot;main&quot; java.lang.LinkageError错误的解决