問題タブ [jna]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ライブラリの検索
Mac OS X および Linux で JNA を使用しています。私の質問は、関数「if_nametoindex」を探している場合、どのライブラリをロードするかを見つける方法ですか? 私が見つけることができる例のほとんどは、Windows に集中しており、「kernel32」をロードします。
java - JNA ByteBuffer statvfs
Javaからのstatvfs呼び出しを使用して、/フォルダーの空き領域を取得しようとしています。
44バイトを示すcからstatvfs構造体のサイズを確認し、java.nio.ByteBuffer.allocateDirect 44バイトを使用してバイトバッファーを割り当て、その順序は44バイトに設定されています。statvfsを呼び出すと、戻り値0が返されるので、呼び出しは成功したと思いますが、buffer.getIntを使用してByteBufferから情報を取得できないようです。これは正しい512 f_bsizeを返しますが、その後は読み取ることができません。 。
buffer.getInt(12)は私にf_blocksを与えるはずですが、私は0を取得します。
または、ロジックに障害がありますか?
java - JNA/ByteBuffer が解放されず、C ヒープがメモリ不足になる
まず、JNA と Java がネイティブ メモリの割り当てを指示する方法についての私の理解はせいぜい本能的なものであり、何が起こっているのかについての私の理解を説明しようとしています。応答に加えて、修正は素晴らしいでしょう...
JNA を使用して Java と C のネイティブ コードを混在させるアプリケーションを実行していますが、Java ガベージ コレクターが直接のネイティブ メモリ割り当てへの参照を解放できず、C ヒープがメモリ不足になるという再現可能な問題が発生しています。
java.nio.ByteBuffer
C コードに a を渡し、バッファを変更してから、Java 関数で結果にアクセスしているため、C アプリケーションが割り当ての問題の原因ではないことは確かです。各関数呼び出し中に単一malloc
と単一の対応がありますが、Java でコードを繰り返し実行した後、malloc は最終的に失敗します。free
これは、問題を示すやや単純化されたコード セットです。実際には、関数呼び出し中に C ヒープに約 16 ~ 32MB を割り当てようとしています。
私のJavaコードは次のようなことをします:
次に、私のCコードは次のようになります。
問題は、この関数を繰り返し呼び出した後、Java ヒープがある程度安定している (成長が遅い) ことですが、最終的に C 関数はそれ以上メモリを割り当てることができなくなります。大まかに言えば、これは Java が C ヒープにメモリを割り当てているが、Java ByteBuffer オブジェクトが比較的小さいため、このメモリを指す ByteBuffer をクリーンアップしていないためだと思います。
これまでのところ、自分の関数で GC を手動で実行すると、必要なクリーンアップが提供されることがわかりましたが、これはお粗末なアイデアと貧弱なソリューションの両方のようです。
ByteBuffer 領域が適切に解放され、C ヒープ領域が制御されるように、この問題をより適切に管理するにはどうすればよいですか?
問題に対する私の理解は間違っていますか (不適切に実行しているものがありますか)?
編集:実際のアプリケーションをより反映するようにバッファサイズを調整しました。画像には約3000x2000を割り当てています...
java - JNA サンプル プログラム java.lang.NoClassDefFoundError
この JNA サンプル コードをコンパイルできます ( https://github.com/twall/jna/#getting_startedのステップ 2 から):
...javac -classpath .:jna.jar -g HelloWorld.java
エラーなしで使用しています。(とりあえず jna.jar をダウンロードして、HelloWorld.java と同じディレクトリに置いておきます。)
しかし、を使用して実行するとjava -classpath .:jna.jar HelloWorld
、次のようになります。
Mac OS X と Linux でまったく同じ例外が発生します。
これを実行するにはどうすればよいですか?
java - JavaJNAラッパーを生成するためのjnaeratorのSimpleMeaningfulExampleは機能しません
jnaerator SimpleMeaningfulExample(http://code.google.com/p/jnaerator/wiki/SimpleMeaningfulExample)を試してみました。
…MacOSX10.5.8とUbuntu8.04の両方で、どちらもJava1.5.0_20を実行しています。
Mac OS Xで1.6.0_15に切り替えて、もう一度試してみました。
私は何か間違ったことをしていますか?
更新:users@jna.dev.java.netに質問を投稿し(このスレッドを参照:https ://jna.dev.java.net/servlets/BrowseList?list = users&by = thread&from = 2312620 )、Olivierから応答を受け取りましたJNAeratorプロジェクトの所有者であるChafik。要約する:
- JNAeratorでリグレッションを見つけました
- 彼は固定スナップショットビルドをアップロードしました:http://jnaerator.sourceforge.net/maven/com/jnaerator/jnaerator/0.9.3-SNAPSHOT/
- そのビルドはうまく機能しましたが、TestLibrary.javaを生成しませんでした
- バグレポートを提出しました:http ://code.google.com/p/jnaerator/issues/detail?id = 50
更新#2: TestLibrary.javaの欠如はバグではないことに気付いた後、Olivierは再度応答しました。これは、デフォルトで生成されたTest.jarファイルに埋め込まれているためです。
java - JNA - DLL から返された C++ インスタンスでメソッドを呼び出す
次のような単一のエクスポートされたメソッドを持つ C++ DLL があるとします。
つまり、呼び出す必要のあるメソッドを実際に含むクラスのインスタンスを返すだけです。
JNA (com.sun.jna.Library を拡張) を使用して getInstance() メソッドを Java のクラスにマップし、返された CustomerProcessor インスタンスを com.sun.jna.Pointer に格納できることはわかっています。
次に、これをどうにかして CustomerProcessor クラスにマップして、その上でメソッドを呼び出すことができますか (そうであれば、その方法)?
java - JNA を介した CFBooleanRef の使用
JNA を使用して Carbon API を呼び出しています。呼び出したい特定の API 呼び出しは、パラメータとして CFBooleanRef を取ります。値 kCFBooleanTrue と kCFBooleanFalse は、ヘッダー ファイルで直接外部参照として宣言されます。
API 呼び出しに値を渡すことができるように、Java 側でこれら 2 つの値への参照を取得するにはどうすればよいですか?
java - JNA を使用してアプリケーション識別子を取得/設定する
Windows 7 のタスクバーに関する以前の質問に続き、アプリケーションが に依存していないことを Windows が認識しない理由を診断したいと思いますjavaw.exe
。現在、次のJNAコードを取得して取得していAppUserModelID
ます:
アプリケーションの出力は一見意味不明です。
出力がUTF-16である可能性があることを認識して、(3)バイト配列をUTF-16から変換してみました。PWSTR
正直なところ、(a) a のサイズがわからず、(b)GetCurrentProcessExplicitAppUserModelID
が実際にバイト配列または文字列を返すかどうかわからないため、ここでの私のアプローチが正しいかどうかはわかりません。
JSmooth は、この効果をシミュレートするラッパーで GUI プロセスを実行することを認識しています。Launch4j は同じことを行うと主張していますが、機能していないようです。Javaラッパーに関係なくAppUserModelID
、セットを探しています。
ここで何がうまくいかないのですか?
dll - FAR PASCAL カスタム DLL で jna を使用する
FAR PASCAL Calling Conventions を使用しているように見えるカスタム DLL にアクセスするために JNA を使用していますが、アクセスしようとするたびに JVM がクラッシュします。
dll の開発ガイドには次のように書かれています。 BOOL FAR PASCAL GetIomemVersion(LPSTR);
そして Dependency Walker は次のように教えてくれます: _GetIomemVersion@4
C#コードでは、次を使用してうまく機能します
私が間違っていることを教えてもらえますか?前もって感謝します!!!
java - JNA-DsGetDcNameA
私は JNA を初めて使用します。DsGetDcName メソッドを JNA に変換したいと考えています。
上記の関数を JNA に変換しました。上記のパラメーターを次のように置き換えました。
上記の関数は を返します997 Error (ERROR IO PENDING)
。メソッド宣言は正しいです。この問題について何か助けてもらえますか? 前もって感謝します。
よろしく
パバン クマール A.