2012-05-04 230 views
3

我想使用我開發的專有庫(DLL)升級設備。該庫使用MFC應用程序正常工作。然而,這裏的麻煩是我們必須在瀏覽器中使這個工作JNA在64位操作系統上具有32位JVM

我的想法是使用一個小程序,然後調用本機DLL來完成這項工作。我的測試Java應用程序一切正常。然後我嘗試了小程序,然後什麼都沒有奏效。

我已經將問題縮小到32位VS 64位JVM。讓我解釋一下:我使用的Eclipse IDE使用64位JVM,因爲我在Windows 7 64位。但是,瀏覽器使用32位JVM,這是行不通的。

兩者之間的差異是傳遞給我的函數的參數。下面是該DLL公開功能的一些例子:

bool UPGRADELIB_API Connect(const char* serverAddress, unsigned short serverPort); 
bool UPGRADELIB_API Upgrade(const char* pFilePath); 

它們通過在Java中分別匹配:

boolean Icon_ConnectClientNode(String serverAddress, int serverPort); 
boolean Icon_Upgrade(String pFilePath); 

我的Java測試GUI傳遞給這個本地庫爲「192.168.XX」該端口的IP地址和。如前所述,在64位,一切都很好。在32位,如果我用C打印serverAddress和serverPort,它顯示

(空):62384

正如你可以看到,即使端口未正確傳遞。

我已經在這上了一個星期了,我從頭上拉了這麼多的頭髮,以至於我不會馬上有任何...請幫助我!

+0

也許使用長而不是字符串可以解決您的問題,因爲在Java中,長變量總是64位。然後只需將字節轉換爲字符串格式。 –

+0

安裝一個32位JVM(甚至是一個32位版本的eclipse)並對其進行測試。一旦這個工作正常,那麼你可以轉移到在瀏覽器中工作的問題。 – technomage

+0

@technomage我在帖子中忘了提及我已經在Eclipse中測試了一個32位JVM。 Eclipse中的64位JVM工作,但不是32位的。我的猜測是64位操作系統 - > 64位JVM =沒問題,但64位操作系統 - > 32位JVM =錯位? – murphyalexandre

回答

0

發現錯誤:正在傳遞很長的時間,Java long與32位和64位中的C/C++ long不一樣大。

傻我。

+0

在那裏,做到了......。 –

相關問題