問題タブ [java-native-interface]

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.

0 投票する
3 に答える
2254 参照

java - JNI include dir の Autoconf テスト

JNI ラッパーの構成スクリプトに取り組んでいます。構成パラメータの 1 つに へのパスがありますjni.h。このパラメーターが C++ コンパイル用に正しく設定されているかどうかを確認するための、迅速かつ汚い Autoconf テストは何ですか? Linux で実行していて、利用可能であると想定できg++ます。

または、このパスを直接取得する方法javah(またはサポート ツール) はありますか?

0 投票する
2 に答える
392 参照

java - JNI (jogl) が実行時に利用可能かどうかを判断する方法は?

Processing コア ライブラリを使用するソース コードの視覚化プロジェクトに取り組んでいます。処理ライブラリには、jogl OpenGL ライブラリを使用してグラフィックスをレンダリングするオプションがあり、パフォーマンスが大幅に向上します。ただし、jogl が使用する JNI ファイルは、プロジェクトを使用しているユーザーやプラットフォームによっては、実行時に必ずしも利用できるとは限りません。

現在、OpenGL を使用するかどうかをユーザーに指定してもらうだけですが、デフォルトで OpenGL を使用し、それが利用できない場合にのみソフトウェア レンダリングにフォールバックできれば、明らかにはるかに優れています。処理ライブラリではこれが簡単にできないようです。レンダラーを指定するのは 1 回だけであり、レンダラーを変更すると… 斬新な動作が得られます。

jogl に必要な JNI が利用可能で、実行時に機能しているかどうかを確認する方法はありますか?

0 投票する
2 に答える
824 参照

java - JNI を使用して C ODBC 接続を JVM に公開するにはどうすればよいですか?

呼び出し API を使用して既存の C アプリケーションに JRE を埋め込んでいます。JDBC を使用して、そのコードでデータベースを操作できるようにしたいと考えています。このアプリケーションはトランザクション処理アプリケーションであり、データベース トランザクションはアプリケーションの C 部分のコードによって管理され、Java コードはそのトランザクション内で実行する必要があります。これは、新しい接続を開くことができないことを意味し ます。既存の接続を再利用する必要があります。

では、JRE をセットアップするときに既存の ODBC 接続ハンドルへの JDBC アクセスを提供する方法はありますか? JDBC-ODBC ブリッジの一部かもしれませんが、その名前の既存のドライバーとは異なり、既存の接続とトランザクションを使用するようにセットアップできるものです。

私の他のオプションは、私が見ているように、次のとおりです。

  • アプリケーションで可能なすべての C 操作に同等の Java を提供します (これは非常に多くの理由で望ましくありません。非常に多くのメソッドがあり、それらを複製するのは面倒です。

  • ODBC 接続を JNI でラップする独自の JDBC ドライバーを作成します。確かに、それは楽しい週末 (月) のプロジェクトになるでしょうが、それよりも早く何かを成し遂げる必要があると私は予想しています。

助けてください、Stack-Overflow、あなただけが私の希望です!

0 投票する
4 に答える
6567 参照

java - JNI経由でJavaで呼び出されたC DLLのメモリ使用量を監視していますか?

JNI 経由で Java から呼び出されているネイティブ C DLL によって使用されているメモリを監視するにはどうすればよいですか? 標準の Java 監視ツールとオプションを使用すると、Java メモリ スペースは表示されますが、C DLL が使用するメモリは表示されません。Java は ~70MB を使用していますが、タスク マネージャーのタスクは 200MB 以上を示しています。

0 投票する
6 に答える
7337 参照

java - Java から iSeries 上の RPG へのアクセス

Java から V5R4 iSeries マシンで実行されている RPG プログラムに直接話しかけた経験のある人はいますか? もしそうなら、コミュニティの推奨事項は何ですか? また、避けるべき落とし穴は何ですか?

私が試みたさまざまな文献やスパイク ソリューションから、ProgramCallBeans (PCML または xPCML を介して) を使用したり、DataQueues (非同期通信用) と通信したり、JNI を使用したりできるように見えます。

私は、堅牢で、パフォーマンスが高く、開発が速く、保守が簡単で、テストが簡単なものを探しています (私たち全員ではありませんか!?!)。

0 投票する
1 に答える
309 参照

dll - JNI を使用して Java から CDialog を開く

DLL 内に記述された CDialog を開く必要があるアプリケーションがあります。問題は、DoModal() が DLL 内で呼び出されると、プログラムがクラッシュし、"Debug Assertion Failed!" が表示されることです。CDialogを開く方法を知っている人はいますか? ありがとうございました!

0 投票する
3 に答える
3178 参照

c++ - Windows Vista でシンボリック リンクを作成するにはどうすればよいですか?

Windows Vista/2008 マシンで Java からシンボリック リンク (ソフト リンク) を作成しようとしています。これを行うには JNI を呼び出す必要があるという考えに満足しています。私は実際のCコードについて助けを求めています。リンクを作成するための適切なシステム コールは何ですか? この件に関するいくつかの優れたドキュメントへのポインターは非常に高く評価されます。

0 投票する
3 に答える
2998 参照

c++ - C/C++ で JNIEnv モックを作成する方法

cunit を使用してテストしたい JNI コードを C で作成しています。JNI 関数を呼び出すには、有効な JNIEnv 構造体を作成する必要があります。

そのような目的のためのモックフレームワークがあるかどうか、またはモック JNIEnv 構造体を自分で作成する方法についての指針を誰が教えてくれるかを知っている人はいますか?

0 投票する
4 に答える
11332 参照

java - 呼び出し API を使用した JNI メモリ管理

JNI メソッドを使用して Java オブジェクトを構築している場合、JNI 呼び出し API を使用して呼び出している Java メソッドにパラメータとして渡すために、そのメモリをどのように管理すればよいですか?

これが私が取り組んでいるものです:

より複雑なデストラクタ メソッドを持つ C オブジェクトがありますfree()。この C オブジェクトは Java オブジェクトに関連付けられます。アプリケーションが Java オブジェクトで終了すると、C オブジェクトはもう必要ありません。

私は次のようにJavaオブジェクトを作成しています(明確にするためにエラーチェックを省略しています):

では、これで作業が完了したinstanceので、何をすればよいでしょうか? 理想的には、ガベージ コレクションを VM に任せたいと思います。それが完了したら、私が提供したポインターinstanceも呼び出すと素晴らしいでしょう。c_object_destroy()これは可能ですか?

別の関連する質問は、このようなメソッドで作成する Java エンティティのスコープに関係しています。class、、、constructorまたはそれ以上を手動でリリースする必要がmethodありますか? JNI のドキュメントは、適切なメモリ管理に関して、イライラするほど曖昧です (私の判断では)。

0 投票する
2 に答える
5127 参照

java - JNIコードがjthrowableのgetMessageメソッドを正常に見つけられないのはなぜですか?

クラスが見つからない場合に生成される例外を処理しながら、jthrowableでメッセージにアクセスしようとしています。しかし、jthrowableオブジェクトのgetMessage()のメッセージIDにアクセスできず、その理由がわかりません。getMessageの署名を「()Ljava / lang / String」に変更してみました(最後にセミコロンはありませんが、それは必要ですよね?)。私はこれについて地獄と混同しています。getMessageをtoStringに置き換えようとましたが、うまくいきませんでした。明らかに、私はここで些細なことをしている。

これが私が使用しているコードです:

このコードの出力は(とりわけ)次のようになります。

真剣に、どうやってここに着くの?
スレッド「main」の例外java.lang.NoClassDefFoundError:com / planet / core360 / docgen / Processor

javap -p -s java.lang.Throwable私にこれを与えます:

「Throwable.java」からコンパイルされた
publicclassjava.lang.Throwable extends java.lang.Objectimplements java.io.Serializable {
...
public java.lang.String getMessage();
署名:()Ljava / lang / String;
..。