java 调 pro*c

编程环境:

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值