我編寫了一組C++類並創建了一個可導出這些C++類之一的DLL。我需要在Java類中實例化導出的C++類。那可能嗎?Java實例化來自DLL的C++類
我在網上搜索了一個可能的解決方案,但是我發現所有使用JNA或JNI的解決方案只能導入C++ 函數。
我編寫了一組C++類並創建了一個可導出這些C++類之一的DLL。我需要在Java類中實例化導出的C++類。那可能嗎?Java實例化來自DLL的C++類
我在網上搜索了一個可能的解決方案,但是我發現所有使用JNA或JNI的解決方案只能導入C++ 函數。
是的,你可以從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);
非常感謝。 SWIG就像一個魅力!順便說一句:我沒有使用Visual Studio,因此,我必須編寫自己的Makefile來編譯源代碼並生成相應的SWIG文件。我使用了http://www.swig.org/Doc1.3/Java.html#nmake中的Makefile,並將其調整爲符合我的需求。 – LaDude
不客氣。恭喜你學習SWIG,並在一天之內使其與C++ API協同工作。 –
如果你想從Java實例化一個C++類,你將不得不編寫一些實例化所需對象的膠水代碼(用C++)。此外,您需要一個與C++類相對應的Java類,並且需要粘合代碼將C++對象轉換爲上述Java類的對象,並將它們保持在一起(即,對C++對象的更改應該反映到Java對象,反過來)。
This tutorial似乎有一些指針,你可以做到這一點。具體來說,它告訴你如何實例化一個Java對象,這是你需要的上述方法。
只有本地** **方法在Java中。 – johnchen902
有沒有實例化C++類的機會? – LaDude
不直接。也許你可以寫一個包裝類。 – johnchen902