我想使用我開發的專有庫(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
正如你可以看到,即使端口未正確傳遞。
我已經在這上了一個星期了,我從頭上拉了這麼多的頭髮,以至於我不會馬上有任何...請幫助我!
也許使用長而不是字符串可以解決您的問題,因爲在Java中,長變量總是64位。然後只需將字節轉換爲字符串格式。 –
安裝一個32位JVM(甚至是一個32位版本的eclipse)並對其進行測試。一旦這個工作正常,那麼你可以轉移到在瀏覽器中工作的問題。 – technomage
@technomage我在帖子中忘了提及我已經在Eclipse中測試了一個32位JVM。 Eclipse中的64位JVM工作,但不是32位的。我的猜測是64位操作系統 - > 64位JVM =沒問題,但64位操作系統 - > 32位JVM =錯位? – murphyalexandre