首页 > 解决方案 > 从 C++ 生成 JNI Bridge 和 Java 接口

问题描述

我知道在给定Java实现的情况下可以生成JNI,javac但是有没有办法做相反的事情(“ cjava”)?

所以,如果我有这样的事情:

mypackage/mylib.h

void helloWorld();

mypackage/mylib.c

#include <iostream>

void helloWorld() {
    std::cout << "Hello World!" << std::endl;
}

不应该像这样生成JNI吗

mylib-jni.c

#include "mypackage/mylib."

JNIEXPORT jlong JNICALL Java_mypackage_helloWorld() {
    helloWorld();
}

Mylib.java

package mypackage;

public class Mylib {    
    public native void helloWorld();    
}

等等

不知何故,我不会偶然发现这样的事情。

标签: javac++code-generationcodebase

解决方案


试试antlr。它有一个 C++ 语法文件,让您可以完全控制。

对于 java 的生成,您可以使用我 hust 发布的 cgV19。我的图片是:

用 antlr 解析 C++ 文件并用它为 cgV19 构建模型加载器。cgV19 使用这个 C++ 解析器来加载一个模型给 cgV19 一个可以从那个模型生成你的 java 文件的插件


推荐阅读