問題タブ [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 投票する
1 に答える
2064 参照

java - xdoclet とは何ですか? (C プログラマーの観点から)

JNI 経由で私の C コードに接続されている Java コードを操作しなければならない C 男からの質問です。

ビルドシステムで作業する必要があり、それをシェルスクリプトから適切なメイクファイルに変更しようとしています。C 部分については簡単ですが、Java 側には何らかの形で xdoclet が含まれます。

xdoclet とは何かをまだ理解していないので、すべてを理解したいと思っています。

Google で調査しましたが、それが何をするかわかりません。私にとっては、公式ドキュメントを理解できるのは、すでに問題に精通しており、10 年間の Java の経験がある場合に限られるように思えます。

ダミーのために、xdoclet が何をするのか説明していただけますか?

ところで、C についても言及しました。オブジェクト指向プログラミングにも興味があります。クラスや継承 (xdoclet を理解するために必要な場合) の基本を説明する必要はありません。


編集: 私がこの質問をしたのは、およそ 10 年前の IT に関するものでした。xdoclet が何であるかはまだわかりませんが、この質問は 1,000 回以上閲覧されました。私は、Java の専門家がチャイムを鳴らして、最終的に問題を片付けてくれるのを見たいと思っています。

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

linux - 共有ライブラリへのシンボリック リンクを作成する Bash スクリプト

この質問は、シェル スクリプトを作成しているモンスターにとってはかなり簡単だと思います。

bash シェル スクリプトを使用して、Unix の共有ライブラリへのシンボリック リンクを作成する最もエレガントで最短の方法を探しています。

必要なのは、「libmythings.so.1.1、libotherthings.so.5.11」などの共有ライブラリ ファイルのリストから始めて、次のようなシンボリック リンクを作成することです。

ライブラリ ファイルは、他のシェル スクリプトなどの他のファイルを含むディレクトリ内にあります。

編集:まあ、「ldconfig -nN」。正常に動作する可能性がありますが、「.so」の後にライブラリのメジャー番号を追加せずに、少なくとも 1 つのライブラリのリンクも必要です。これは、1 つまたは複数のライブラリが Java からの JNI 呼び出しのエントリ ポイントであるためです。 System.loadlibrary("libraryname") によってインスタンス化され、"libraryname.so.X" ではなく "libraryname.so" という名前のライブラリが必要です。

Java 部分に回避策があれば、ldconfig -nN だけを使用したソリューションが機能する可能性があります。

0 投票する
11 に答える
2449 参照

java - Java 開発者として、C または C++?

私は過去 5 年間、専門的に Java を書いてきました。最近、いくつかの Windows 固有の関数を呼び出すために、JNI を少し掘り下げる必要がありました。

この経験から、私の C (または C++) 言語の苦手さが浮き彫りになりました。私が C を初めて知ったのは、11 年前に高校で読んだ簡単な「ダミー」の本だけでした。

その間に両方の言語、特に C++ と標準ライブラリが進歩したことを私は知っています。

C または C++ を学ぶのは適切でしょうか? どの本が一番いいでしょうか?

また、Windows プログラミングに関する推奨事項はありますか? 特定の API 呼び出しを理解するのに十分なほど MSDN を読むことができますが、「全体像」に関して何かが欠けていると感じています。

ありがとう

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

java - コマンドラインからの呼び出しと JNI からの呼び出し

Java アプリケーション サーバーから tesseract OCR (光学式文字認識を行う C++ のオープン ソース ライブラリ) を呼び出す必要があります。現在、Runtime.exec() を使用して実行可能ファイルを実行するのは簡単です。基本的なロジックは

  1. 現在メモリに保持されているイメージをファイル (.tif) に保存します。
  2. イメージ ファイル名を tesseract コマンド ライン プログラムに渡します。
  3. FileReader を使用して Java から出力テキスト ファイルを読み込みます。

Tesseract 用の JNI ラッパーを作成することで、パフォーマンスがどの程度向上する可能性がありますか? 残念ながら、Linux で動作するオープン ソースの JNI ラッパーはありません。私は自分でそれをしなければならず、その利益が開発コストに見合うかどうか疑問に思っています.

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

java - バイトストリーム / C / JNI

バイト ストリームを格納するために C API 実装で通常使用されるデータ型は何ですか? この型を jbyteArray に変換するにはどうすればよいですか?

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

java - Javaからネイティブへのポインタの受け渡し

DLL ライブラリへのインターフェイスを作成しているので、Java で使用できます。jlong​​ パラメータの値を変更するには、ネイティブ関数が必要です。パラメータが参照によって渡されたように。私の Java メソッドには、ここに示されているネイティブ関数 MPUSBWrite と同じパラメーターが必要です。

実際に動作しないコードの例: MPUSBWrite は 4 番目のパラメーターを参照として取得し、その値を変更します。pLength 渡された変数を読み取ると、常に 0 になります。

ジャワ:

ネイティブ C++:

私の C++ コードが参照によって pLength 変数の値を変更する方法はありますか?

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

air - C プログラムからインプロセス共有ライブラリとして AIR ランタイムをロードする方法

java.exe の行に沿って、C で特別な AIR ランチャー プログラムを作成したいと考えています。

プロセス ビューアーを使用して AIR プログラムの実行を調べたところ、使用されている AIR ランタイム DLL を見つけることができました。AIR プログラムは、起動後に AIR ランタイムをインプロセス共有ライブラリとしてバインドするプラットフォーム固有の実行可能ファイルとしてインストールされるという点で Java とは異なります (ユーザーがアイコンをダブルクリックします)。

さて、代わりに java.exe のような AIR ランチャーを作りたいと思います。

java.exe は、インプロセス共有ライブラリとして Java JVM ランタイム (JRE) にバインドするプラットフォーム OS プロセスとして起動されます。実行する Java アプリケーションは、java.exe のコマンドライン引数として指定されます。java.exe が実行され、JVM が完全に機能するようになると、指定された Java アプリケーション クラスが実行のために JVM クラス ローダーによってロードされます。その指定された Java アプリケーションは、ある意味で java.exe のプロセスを「ハイジャック」します。もちろん、指定された Java アプリケーションは、それをホストする java.exe プログラムとしてすべてのプロセス リストに表示されます。

AIR アプリの起動をこのように動作させたいと考えています。なんで?そのため、AIR をハッキングする方法を探り、多くの欠点を克服することができます。たとえば、まず、実行中の AIR アプリケーションで使用できるようになるいくつかの新しい API を使用して、AIR ランタイム エクスペリエンスを拡張したいと考えています。

私の最初の注文は次のとおりです。

  • .NET PInvoke に匹敵する ActionScript3 のバインディング インターフェイスを C に実装する
  • これを行うための Java SE にある API (Runtime.exec、ProcessBuilder、Process) に匹敵するプロセス起動用の API を追加します。
  • AIR アプリケーションのサポートを追加して、stdin、stdout、stderr と対話できるようにします。奇妙なことに、Adobe は AIR でのローカル ファイル アクセスのサポートを追加しましたが、これらの標準ファイル パイプとのやり取りを省略しました (ただし、AIR がサポートするすべての OS プラットフォームで検出されます)。
  • stdin、stdout、stderr を介した AMF のサポートを実装します。これにより、AIR (または Java または任意の AMF 対応言語) アプリは、AMF オブジェクトの交換を介して通信を相互処理できます。これにより、Microsoft の PowerShell のタッチが AIR に追加されます。

現在、Merapi は Java との AMF ブリッジを提供しているため、これの有効性が実証されています。悲しいかな、Merapi はプロセス間通信を行うためにローカルホスト ポートとソケットを使用する必要があります。

0 投票する
5 に答える
19908 参照

java - Javaのネイティブ実装とは?

Java Object クラスを見ると、次のようなメソッドがいくつか見つかります。

これらのネイティブとは何ですか?これらのメソッドはどのように機能しますか?