亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將Java嵌入C ++應用程序?

將Java嵌入C ++應用程序?

largeQ 2019-11-29 09:54:36
我得到了一個用C ++編寫的應用程序,并且能夠通過用C ++編寫插件來擴展該應用程序的功能。我基本上想要做的是將Java嵌入到此應用程序中。這已經通過Python完成(我沒有完成)。我讀了一些有關JNI的內容,但是總有使用Java類的完整程序的演講。我想做的是,使用Java中C ++中的類與應用程序進行交互。在這種情況下,它是一個3D應用程序,稱為Cinema 4D。有什么方法可以使用JNI或類似的方法在應用程序運行時(以某種腳本語言)編譯和評估Java代碼?嵌入后的虛構代碼示例:import c4d.documents.*;class Main {  public static void main() {    BaseDocument doc = GetActiveDocument();    BaseObject op = doc.GetActiveObject();    if (op != null) {      op.Remove();    }  }}此代碼應與Cinema 4D交互以刪除所選對象。
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

您可以在應用程序中嵌入JVM。Oracle的官方參考書提供了更多詳細信息。它的簡介是:


#include <jni.h>       /* where everything is defined */


int main() {

  JavaVM *jvm;       /* denotes a Java VM */

  JNIEnv *env;       /* pointer to native method interface */

  JDK1_1InitArgs vm_args; /* JDK 1.1 VM initialization arguments */

  vm_args.version = 0x00010001; /* New in 1.1.2: VM version */

  /* Get the default initialization arguments and set the class 

   * path */

  JNI_GetDefaultJavaVMInitArgs(&vm_args);

  vm_args.classpath = ...;

  /* load and initialize a Java VM, return a JNI interface 

   * pointer in env */

  JNI_CreateJavaVM(&jvm, &env, &vm_args);

  /* invoke the Main.test method using the JNI */

  jclass cls = env->FindClass("Main");

  jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V");

  env->CallStaticVoidMethod(cls, mid, 100);

  /* We could have created an Object and called methods on it instead */

  /* We are done. */

  jvm->DestroyJavaVM();

}

如果愿意,您可以做更復雜的事情


查看完整回答
反對 回復 2019-11-29
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

對于您是要將Java嵌入C ++應用程序還是將其嵌入,似乎有些困惑。我會處理每種情況。

  1. 要將Java嵌入到c ++應用程序中,可以對Java程序進行套接字調用。在Java端,您使用SocketServer,在C ++端,您使用常規套接字層庫。到目前為止,這是最簡單,最可擴展的方法。隨著Java工作負載的不斷增加,您將繼續添加其他jvm。部署有點復雜,但是效果很好。

  2. 用于在Java中嵌入C ++應用程序。這很簡單。您將C ++應用程序編譯到共享庫中,并使用JNI調用它。


查看完整回答
反對 回復 2019-11-29
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

我基本上想要做的是將Java嵌入到此應用程序中。這已經通過Python完成(我沒有完成)。


JNI Invocation API支持此功能,如@awoodland所述。這是Java 6/7的當前鏈接。


我想做的是,使用Java中C ++中的類與應用程序進行交互。在這種情況下,它是一個3D應用程序,稱為Cinema 4D。


為此,您可以使用以下之一:


用C實現的Java本機方法

JNA

斯威格

有什么方法可以使用JNI或類似的方法在應用程序運行時(以某種腳本語言)編譯和評估Java代碼?


您可能會對BeanShell或Groovy等感興趣。兩者都支持在JVM上運行的動態解釋的代碼。


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 469 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號