2012-03-26 62 views
1

我聽說過JNI,並試圖使用它。我希望做的是建立從C的Java類或C++ 只有,即沒有Java代碼:我可以只從C/C++創建Java類嗎?

class MyClass { 
    static { System.loadLibrary("myclass_impl.dll") } 
    native public int someFunction(String string); 
} 

例如,Python允許從C創建擴展類因此你可以也使用ctypes從DLL中包裝C函數。

有沒有辦法爲Java做到這一點?

+1

我明白你想要訪問用C/C++編寫的函數,並且已經直接從你的Java代碼編譯過了嗎?沒有將它們寫入Java虛擬機,我沒有看到發生。順便說一句,這大致就是Python所做的。 那麼可能嗎?是。實際的?不,別人不會像你的例子那樣編寫Java代碼。 – len 2012-03-26 17:36:23

回答

3

幾乎肯定不是。 Java類必須用Java字節碼錶示,而C和C++不是(通常)能夠生成的。此外,Java存儲器模型與C和C++中的模型有很大不同,並且需要其自身的不尋常佈局約束等。除非你想在C++中基本上實現一個完整的Java編譯器,否則我會感到驚訝,如果這可以完成的話。

+1

+1:如果無法完成,我會感到驚訝,但如果有人提出了一個很好的理由,我會同樣感到驚訝。你可以從C++程序中調用'javac'。 – 2012-03-26 18:42:40

+0

@PeterLawrey:你不能從C++程序中調用'javac'作爲一個命令,因爲它不是JRE的一部分(記住,JDK在運行時不需要),但實際的編譯器類應該是因此應該可以通過JNI調用。 – 2015-05-06 14:03:39

+0

@JanHudec通常你不需要JDK,但通常你不需要反編譯一個類,在這種情況下,使用專門設計的工具來實現這一點是有意義的。 – 2015-05-06 17:12:23

相關問題