博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 调 pro*c
阅读量:6969 次
发布时间:2019-06-27

本文共 2934 字,大约阅读时间需要 9 分钟。

hot3.png

java 调 pro*c 博客分类: java

编程环境:

       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 
/* Header for class HelloWorld */#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "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 
#include
#include "HelloWorld.h"#include "procDemo.h"//自定义了个头文件用于调用pro*c的方法JNIEXPORT void JNICALLJava_HelloWorld_print(JNIEnv *env, jobject obj){ //调用pro*c的代码 execute(); printf("Hello World ni mei o !\n"); return;}

   procDemo.h

 

#pragma once#ifdef __cplusplusextern "C" {#endifvoid execute();#ifdef __cplusplus};#endif

  

procDemo.pc

#include 
#include
#include
#include
#include
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();}

 

 

转载于:https://my.oschina.net/xiaominmin/blog/1598211

你可能感兴趣的文章
Linux终端会话实时共享(kibitz)
查看>>
“一键制作启动u盘失败”的主要原因是什么?
查看>>
Asp.Net上传文件到Access数据中,并从数据库中读取文件并保存
查看>>
【转】libvirt kvm 虚拟机上网 – Bridge桥接
查看>>
c/c++ helloworld
查看>>
xopy写批处理的忌讳..
查看>>
为程序添加系统上下文菜单
查看>>
css色彩对应值
查看>>
XWiki 4.3 正式版发布
查看>>
java中finally和return的执行顺序
查看>>
.net微信公众号开发——群发消息
查看>>
纪念逝去的岁月——C++实现一个队列(使用类模板)
查看>>
GO语言练习:多返回值函数
查看>>
让x86的android模拟器能模拟arm架构系统
查看>>
初学Struts2-自定义拦截器及其配置
查看>>
关于js中的几个小问题。
查看>>
hdoj-2058-the sum problem
查看>>
MySql基础整理
查看>>
Spring Bean Scope 有状态的Bean 无状态的Bean
查看>>
php 批量修改文件格式或重命名
查看>>