在java中直接调用C语言定义的函数

在Java中,通过使用TCC4Java库,可以在Java运行时直接调用C文件里面定义的函数。而不用事先将C编译成动态链接库,然后借助于JNI或者JNA来调用C函数。这样可以方便的将C当成脚本语言在Java中使用。

上个简单点例子:

runCFunction.c

int sum(int a, int b) {
    return a + b;
}

RunCFunction.java

import java.io.IOException;
import cn.com.tcc.State;
import cn.com.tcc.TCC;

import com.sun.jna.Function;

public class RunCFunction {
    public static void main(String[] args) throws IOException {
        // 初始化TCC
        TCC.init("./tcc");

        // 编译C文件
        State state = new State();
        state.compile("./runCFunction.c");
        state.relocateAuto();

        // 获取C文件里面定义的函数
        Function sumFunc = state.getFunction("sum");

        // 调用函数
        System.out.println(String.format("%d + %d = %d", 3, 5,
                sumFunc.invokeInt(new Object[] { 3, 5 })));
        System.out.println(String.format("%d + %d = %d", 10, 99,
                sumFunc.invokeInt(new Object[] { 10, 99 })));

        state.delete();
    }
}

程序输出为:

3 + 5 = 8
10 + 99 = 109

TCC4Java库链接:

https://github.com/wangzhengbo/TCC4Java

http://sourceforge.net/projects/tcc4java/files

发表评论

[/0o0] [..^v^..] [0_0] [T.T] [=3-❤] [❤.❤] [^v^] [-.0] [!- -] [=x=] [→_→] [><] 更多 »
昵称

抢沙发~