你试过jni的调用吗?
效果如何?

解决方案 »

  1.   

    Java如何调用C/C++(JNI)  1. program Java source file loading Native method
    //
    //
    // NativeDemo
    // Author: huang_jc 
    // file name: NativeDemo.java
    public class NativeDemo 
    {  
             int i;
        int j;
        public static void main(String args[])
        {
                 NativeDemo ob = new NativeDemo();
               ob.i = 10;
                ob.j = ob.test();
                System.out.println("this is ob.i:"+ob.i+"\n");
                System.out.println("this is ob.j:"+ob.j);
        } 
        public native int test();
        static 
        {
         System.loadLibrary("NativeDemo");    
        }
    }2.Compile file NativeDemo.java 
    Javac NativeDemo.java3.Use javah.exe to produce file NativeDemo.c and NativeDemo.h
       a : javah NativeDemo to produce NativeDemo.h which is:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <native.h>
    /* Header for class NativeDemo */#ifndef _Included_NativeDemo
    #define _Included_NativeDemo#pragma pack(4)typedef struct ClassNativeDemo {
    long i;
    long j;
    } ClassNativeDemo;
    HandleTo(NativeDemo);#pragma pack()#ifdef __cplusplus
    extern "C" {
    #endif
    extern long NativeDemo_test(struct HNativeDemo *);
    #ifdef __cplusplus
    }
    #endif
    #endif
    b : use javah -stubs NativeDemo to produce NativeDemo.c which seems as:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <StubPreamble.h>/* Stubs for class NativeDemo */
    /* SYMBOL: "NativeDemo/test()I", Java_NativeDemo_test_stub */
    __declspec(dllexport) stack_item *Java_NativeDemo_test_stub(stack_item *_P_,struct execenv *_EE_) {
        extern long NativeDemo_test(void *);
        _P_[0].i = NativeDemo_test(_P_[0].p);
        return _P_ + 1;
    }
    4. Write your own implimentation of method test()
    //file name test.c
    #include <StubPreamble.h>
    #include "nativedemo.h"
    #include <stdio.h>long NativeDemo_test(HNativeDemo *this)
    {
        printf("hello:!\n");
        printf("this is in the native method!\n");
        return (unhand(this)->i)*2;
    }5. link NativeDemo.c and test.c to produce NativeDemo.dll
    Use VC++5.0 tools :Cl.exe 
    Cl /GD NativeDemo.c test.c /LD
    then we get NativeDemo.dll
    NativeDemo.c
    test.c
    Generating Code.../out:NativeDemo.dll
    /dll
    /implib:NativeDemo.lib
    NativeDemo.obj
    test.obj
    Creating library NativeDemo.lib and object NativeDemo.ex
    Press any key to continue 
    6.Run java NativeDemowe get the such result:D:\vj11user\native>java NativeDemo
    hello:!
    this is in the native method!
    this is ob.i:10this is ob.j:20D:\vj11user\native> 
    NOTE:
              Do not forget this: 
    c:> set INCLUDE=d:\java\include;d:\java\win32;%INCLUDE%
    C:>set LIB =d:\java\lib;%LIB%
    where d:\java is the directory of your jdknew version jdk1.2.1 :With new jdk1.2.1 :1.javac NativeDemo.java2. javah NativeDemo to produce head file (You need not to javah -stubs NativeDemo to produce NativeDemo.c file),You don't need the c file. Just the NativeDemo.h is sufficient!3.Use VC++ produce a window dll project and add the NativeDemo.h to it.then implement the function. All is OK!
    NOTE: the data type conversion between java and c++.See jni.h for more information.
     
      

  2.   

    corba如何呢?有没有example呢?
    配置运行环境要点手续吧?给点tips吧
      

  3.   

    有个idl接口,想让c++去实现,在客户用java调用
    module HelloApp
    {
      interface Hello
      {
        string sayHello();
      };
    };
    如何做到呢?1
      

  4.   

    那就得用corba了。
    具体怎么实现光靠几个例子是不够的。
    以前我买到过一本将C++编corba的书,但不知现在还有吗。
      

  5.   

    用CORBA还要配服务器,如果只是用到少量的函数,就用JNI吧
    挺方便的。