2011-03-07 82 views
0

我有一個C++ DLL,其中的函數嵌套在名稱空間中。通過JAVA訪問C++本機DLL(帶名稱空間)

我需要在java中訪問這些函數..我不是一個java專家,但我知道它的一些基本知識。

我發現了基本的Java代碼來訪問使用JNI的C++本機DLL中的方法,但我不知道如何訪問嵌套在命名空間中的函數。

回答

1

您可能需要獲取C++函數的重名名稱。您可以使用nm在Unix上執行此操作,或在Windows上使用dumpbin /exports。重名的名稱將具有名稱空間和函數名稱,因此應該很容易找到(除非有幾個重名名稱需要區分)。你確定這些函數是正常的C++函數而不是類方法嗎?

+0

該結構類似於: 名稱空間>類>靜態方法。 而我也有dll的頭文件..//思維會甚至幫助... – 2011-03-07 04:04:48

+0

@Mafahir:靜態方法將工作得很好 - 它是非靜態的,將導致問題。 – 2011-03-07 04:05:31

1

幫自己一個忙:使用BridJ用於C++的互操作,它應該能夠應付大多數的命名空間的問題:-)

(免責聲明:我BridJ的作者)

+0

你不應該真的透露你是該圖書館的作者嗎? – b3bop 2012-01-09 16:52:54

+0

hehe,你是對的,我應該:編輯:-) – zOlive 2012-01-10 11:38:58

0

「耶利米Willcock」答案是正確的,無論如何,你總是可以訪問一個DLL函數,內部類或命名空間使用「mangled名稱」,它是奇怪的,骯髒的做事方式,但它的作品,即使有其他方式。

你可以做一些測試,accesign這些功能,以後,做你自己的包裝。