2012-05-04 23 views
3

私が開発した独自のライブラリ(DLL)を使用してデバイスをアップグレードしたい。ライブラリは、MFCアプリケーションを使用して正常に動作します。しかし、ここでひねりは、のブラウザでを作っておかなければならないということです。64ビットOS上の32ビットJVMを使用したJNA

私の考えは、アプレットを使用し、ネイティブDLLを呼び出してこの作業を行うことでした。私のテストJavaアプリケーションではすべてうまくいきました。その後、私はアプレットを試したが、何も働かなかった。

問題を32ビットVS 64ビットJVMに絞りました。私が説明しましょう:私が使用しているEclipse IDEは、64bit JVMを使用しています。私はWindows 7 64bitです。ただし、ブラウザは32bit JVMを使用しても動作しません。

2つの違いは、私の関数に渡されるパラメータです。ここではDLLが公開する機能のいくつかの例です:

それぞれによって、Javaで一致している
bool UPGRADELIB_API Connect(const char* serverAddress, unsigned short serverPort); 
bool UPGRADELIB_API Upgrade(const char* pFilePath); 

私のJava GUIテストはこのネイティブのlib "192.168.xxの"に渡し

boolean Icon_ConnectClientNode(String serverAddress, int serverPort); 
boolean Icon_Upgrade(String pFilePath); 
ポートのIPアドレスはです。 64bitでは、私が以前に言ったように、すべてが問題ありません。私はCにserverAddressでとするserverPortを印刷する場合 32ビットでは、それは

(ヌル)を示しています。あなたが見ることができるように62384

、でもポートが正しく渡されていません。

私は今一週間これをやっています、私はすぐにはない...私を助けてください私の頭からそんなに髪を引っ張っている!

+0

Javaでは、長い変数は常に64ビットなので、文字列ではなく長い文字列を使用すると問題が解決するかもしれません。次に、バイトを文字列形式に変換します。 –

+0

32ビットJVM(または32ビット版のeclipse)をインストールし、それをテストします。それが適切に機能すると、ブラウザ内で動作させるという問題に移行することができます。 – technomage

+0

@technomage Eclipseで32ビットのJVMをテスト済みであることを忘れてしまいました。 Eclipseの64ビットJVMは動作しますが、32ビットのJVMは動作しません。私の推測は64ビットOSです - > 64ビットJVM =問題はありませんが64ビットOS - > 32ビットJVM =ミスアライメント? – murphyalexandre

答えて

0

エラーが見つかりました:長いとJava longは32ビットと64ビットでC/C++と同じサイズではありません。

愚かな私。

+0

そこに行って、それをしました...。 –

関連する問題