問題タブ [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 - InputStreamをJNAを介してファイルポインタとしてCコードに渡します
Cで書かれた(編集できない)DLLがあり、次のような関数プロトタイプがあります。
DLLへのJNAインターフェイスを作成したいのですが、FILE*bar引数に何を渡す必要があるのかわかりません。私はInputStream(私の好みです)を渡す必要があると思いますが、JNAの文献はこの主題に関してまばらに見えます。
Javaインターフェイスはどのようになりますか?そして、私は本当にfooに何を渡す必要がありますか?
編集:fooは、barがfopenの結果であると想定し、fscanfなどの操作を呼び出します。
編集2:最終的に、私はJavaに文字列を持っており、それをファイルであるかのようにCで読み取る必要があります(これはまったく別の質問かもしれません)。理想的には、ファイルの書き込みを避けたいので、InputStreamをCファイルポインターに変換することが非常に望ましい(そして明らかに非常に難しい)理由です。
java - OSGiバンドル内にDLLを(JNAを使用して)ロードする
OSGiは私のDLLファイルを見つけることができず、その理由を理解できないようです。
foo.dll
現在、バンドルのルートにDLLファイル( )がありますが、libs
ディレクトリにも入れてみました。
問題のバンドルのマニフェストは次のようになります。
次に、JNAインターフェイスでloadLibraryを実行します(ドキュメントに従って)。
次に、別のクラスでJNAインターフェイスを使用しようとします
JNAを別のバンドル(com.sun.jnaと上記でインポートした他のパッケージをエクスポートする)で提供していますが、ここで定義したバンドルでパッケージ化してみました(その場合はクラスパスに追加しました)。
も指定してみましBundle-NativeCode: /foo.dll
た。
また興味深いことに、これらは関連するOSGiプロパティです(私はこれを使用してプルアップしましたgetprop
)
このすべての後でも(そして私が行ったすべての試行で)、私は常に次のエラー(およびスタックトレースは表示されていません)で終わります:
...それで私は何が欠けていますか?
編集:私は、JNAインターフェイスコードと、JUnitテストプログラムの一部として通信するDLLをテストし、成功したことにも注意する必要があります。
編集2:ライブラリを呼び出しているクラスにこのコードを追加すると、JNAはライブラリを見つけることができるようです(Native.loadLibrary
後で呼び出されたとき)。マニフェストのBundle-NativeCodeディレクティブに基づいて、この呼び出しを回避できるはずです。明らかに、ライブラリがロードされると、Native.loadLibraryはその既存のインスタンスを取得しますが、この非常に順序固有の戦術に依存したくないのです。
java - JNAを使用してC配列をJavaに返す
私は C にあまり詳しくありませんが、Java コードで C ライブラリを使用する必要があります。DLL を作成し、問題なくアクセスできますが、C コードから Java コードに int の配列を返そうとしています。
CI では、単純に配列へのポインターを返すことができると考えていましたが、私の Java コードでは期待どおりに動作しません。Cコードは次のとおりです。
これをC++でテストすると
その後、正常に動作し、期待どおりの値 739、255 を取得します。
次のようにJNAパッケージを使用してJavaで使用してみます(ただし、これにより739、-16777214が得られます):
JNA のドキュメントでは、Java でint *buf
マップされるようなプリミティブ配列と書かれていますが、戻り値の型を からに変更しようとすると、 illegalArgumentException が発生します。int[] buf
IntByReference
int[]
C から配列を正しく返しているのか、それとも Java で配列に正しくアクセスしていないのかわかりません。どんな助けでも大歓迎です。
c# - JavaのIntPtr(C#)に相当するものは何ですか?
Java(JNA)のIntPtr(C#)に相当するものは何ですか?
java - JNA-Delphi関数のマッピング
この関数をJNAでマップするにはどうすればよいですか?
Delphiコード:
返されるint値は、エラーの場合は0、正しい実行の場合は1です。
私の提案は:
Javaコード:
問題は、dllの関数が0を返すことです。他のデータ型も試しましたが、うまくいきませんでした。問題は、dll関数がパラメーターoutData1とoutData2に書き込めないことだと思います。
誰が私を助けることができますか?....ありがとう!
java - JNA の代わりに JNI を使用してネイティブ コードを呼び出しますか?
JNA は、JNI に比べて、ネイティブ コードを呼び出すのにかなり使いやすいようです。JNA よりも JNI を使用するのはどのような場合ですか?
java - JNA を使用した CFString オブジェクトの作成
Mac OS X で JNA を使用するコツをつかもうとしています。Cocoa に相当するものがない Carbon ライブラリにアクセスしたいので、Rococoa は役に立ちません (と思います...)。
CFStringRef をパラメーターとして必要とする Carbon 関数を呼び出そうとすると、スタックします。Java String から CFStringRef を作成するにはどうすればよいですか?
これまでの私の試みは次のとおりです。
java - Rococoa での場所の無効なメモリ アクセス
私は rococoa (java から osx cocoa api ライブラリへ) を使用して簡単なスクリーンショット アプリケーションをコーディングしようとしてきましたが、実際にスクリーンショットを撮ってファイルに保存するところまで到達しました。残念ながら、アプリケーションが「場所のメモリ アクセスが無効です...」というエラーで失敗することがあります。参照を維持できていないため、これはガベージコレクションが原因であると想定しています。クラッシュの原因となっている行は次のとおりです: int[] data = pointer.getIntArray(0, bytesPerPlane / 4);
私は実際にはObjective Cで何もコーディングしておらず、rococoaで始めたばかりなので、これと混同しているだけです。以下の関連コードをコピーしました。これについて何か助けていただければ幸いです。
java - シャットダウン フックで kernel32.CreateToolhelp32Snapshot への jna 呼び出しにより VM がクラッシュする
スレッドが以下を使用してシャットダウン フックを設定する場合
メソッドを jna 経由で呼び出します。
VM がクラッシュします。で同じメソッドを呼び出すと、
フックを使用しても、呼び出しによって VM がクラッシュすることはありません。
理由はありますか?
VM クラッシュ エラー レポートの一部が役立つ場合は、投稿できます。
java - Delphi で Java から呼び出された DLL をデバッグするには?
Delphi を使用して、 JNA (Java Native Access)経由で Java から呼び出すことができる DLL を作成しました。この DLL のメソッドは単純な操作ですが、将来の使用とより複雑な呼び出しのために、DLL が Java から直接 (または Java IDE から) 呼び出される場合、Delphi デバッガをどのように使用できるか知りたいと思います。