2009-05-10 5 views
3

Javaコードから静的ウィンドウライブラリ(*.lib)を使用する必要がありますが、C++ JNIラッパーを記述できます。これはC++で経験したものです)。最小限の労力でJavaコードのWindows静的ライブラリを使用する(おそらくはJNAを使用)

最も簡単な(最小の開発努力)方法は、パフォーマンスは重要ではありません。そのコードはちょうどいくつかのデータをフェッチするため、Java側で最も効果的に作業されます。

おそらく私はJNAを使用しますが、AFAIKには動的ライブラリが必要ですが、静的ライブラリが必要です。

また、asked questionは、静的ライブラリを動的ライブラリに変換する際に使用します。

答えて

2

これは価値のあることですが、私はこのようなプロジェクトを後にしました。 JNIラッパーを自動生成するのはかなり簡単でした。私たちは約350の関数の書き出しをラップすると思います。ラッパーを自動生成するためのスクリプトを作成するのに約3時間かかりました(申し訳ありませんが、スクリプトを便利に置いたり、投稿したりしないでください)。

私たちはほとんどC++コードを書いていませんでしたが、JNIの仕組みを理解する必要がありました...実際にはかなり良い学習機会/プロジェクトです - 時間があればJNIを恐れないでくださいJVMの仕組みについて学んだことにどれくらい驚きますか?

このルートを実行する場合、ラッパー関数を実際には軽量に保つことをお勧めします。必要な引数をJNI値からネイティブに変換するだけです(これは主に文字列に必要です)。ネイティブ関数を呼び出し、結果を変換し直してください。

文字列ポインタを渡し、文字列をポインタに戻す機能がある場合は、Java側からサイズ1の文字列配列を使用し、ネイティブ呼び出しの結果を入力します。

またはあなたが時間に追われている場合、.dllファイルへのあなたの.libをコンパイルし、はい私ができるが、私は非常に多く、Javaからdirectrly全体のものを呼び出す好む

3

静的ライブラリに直接呼び出すDLL(ダイナミックライブラリ)プロジェクトを作成してから、作成した新しいDLLでJNAを使用することができます。

+1

:-) JNAを使用します。 。 。より速く実験することができます。私が使っているライブラリは何百もの関数が混乱しているので、完全なラッパーを書くことはオプションではなく、少しずつ行うことも苦痛になります。 –

+1

私はJNIを提案していないので、複雑なものをラッパーに書く必要はありません。実際にはヘッダのすべての関数に_declspec(dllexport)というプレフィックスを付けて(これはエディタのsearch-replaceで簡単に行うことができます)、DLLプロジェクトとしてビルドすると、DLLが得られます。 – Francis

+0

私はそれを試してみるよ、ありがとう。 –

関連する問題