2013-07-11 118 views
3

我編寫了一組C++類並創建了一個可導出這些C++類之一的DLL。我需要在Java類中實例化導出的C++類。那可能嗎?Java實例化來自DLL的C++類

我在網上搜索了一個可能的解決方案,但是我發現所有使用JNA或JNI的解決方案只能導入C++ 函數

+2

只有本地** **方法在Java中。 – johnchen902

+0

有沒有實例化C++類的機會? – LaDude

+1

不直接。也許你可以寫一個包裝類。 – johnchen902

回答

2

是的,你可以從Java實例化一個C++類。

一種方法是使用SWIG,它可以爲C++類生成Java包裝。

例如,給定一個C++類是這樣的:

class MyClass { 
public: 
    MyClass(); 
    int myMethod(int arg); 
} 

SWIG允許您編寫Java代碼:

MyClass myclass = new MyClass(); 
int val = myClass.myMethod(42); 
+0

非常感謝。 SWIG就像一個魅力!順便說一句:我沒有使用Visual Studio,因此,我必須編寫自己的Makefile來編譯源代碼並生成相應的SWIG文件。我使用了http://www.swig.org/Doc1.3/Java.html#nmake中的Makefile,並將其調整爲符合我的需求。 – LaDude

+0

不客氣。恭喜你學習SWIG,並在一天之內使其與C++ API協同工作。 –

0

如果你想從Java實例化一個C++類,你將不得不編寫一些實例化所需對象的膠水代碼(用C++)。此外,您需要一個與C++類相對應的Java類,並且需要粘合代碼將C++對象轉換爲上述Java類的對象,並將它們保持在一起(即,對C++對象的更改應該反映到Java對象,反過來)。

This tutorial似乎有一些指針,你可以做到這一點。具體來說,它告訴你如何實例化一個Java對象,這是你需要的上述方法。