問題タブ [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.

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

java - InputStreamをJNAを介してファイルポインタとしてCコードに渡します

Cで書かれた(編集できない)DLLがあり、次のような関数プロトタイプがあります。

DLLへのJNAインターフェイスを作成したいのですが、FILE*bar引数に何を渡す必要があるのか​​わかりません。私はInputStream(私の好みです)を渡す必要があると思いますが、JNAの文献はこの主題に関してまばらに見えます。

Javaインターフェイスはどのようになりますか?そして、私は本当にfooに何を渡す必要がありますか?

編集:fooは、barがfopenの結果であると想定し、fscanfなどの操作を呼び出します。

編集2:最終的に、私はJavaに文字列を持っており、それをファイルであるかのようにCで読み取る必要があります(これはまったく別の質問かもしれません)。理想的には、ファイルの書き込みを避けたいので、InputStreamをCファイルポインターに変換することが非常に望ましい(そして明らかに非常に難しい)理由です。

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

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はその既存のインスタンスを取得しますが、この非常に順序固有の戦術に依存したくないのです。

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

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[] bufIntByReferenceint[]

C から配列を正しく返しているのか、それとも Java で配列に正しくアクセスしていないのかわかりません。どんな助けでも大歓迎です。

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

c# - JavaのIntPtr(C#)に相当するものは何ですか?

Java(JNA)のIntPtr(C#)に相当するものは何ですか?

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

java - JNA-Delphi関数のマッピング

この関数をJNAでマップするにはどうすればよいですか?

Delphiコード:

返されるint値は、エラーの場合は0、正しい実行の場合は1です。

私の提案は:

Javaコード:

問題は、dllの関数が0を返すことです。他のデータ型も試しましたが、うまくいきませんでした。問題は、dll関数がパラメーターoutData1とoutData2に書き込めないことだと思います。

誰が私を助けることができますか?....ありがとう!

0 投票する
10 に答える
49909 参照

java - JNA の代わりに JNI を使用してネイティブ コードを呼び出しますか?

JNA は、JNI に比べて、ネイティブ コードを呼び出すのにかなり使いやすいようです。JNA よりも JNI を使用するのはどのような場合ですか?

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

java - JNA を使用した CFString オブジェクトの作成

Mac OS X で JNA を使用するコツをつかもうとしています。Cocoa に相当するものがない Carbon ライブラリにアクセスしたいので、Rococoa は役に立ちません (と思います...)。

CFStringRef をパラメーターとして必要とする Carbon 関数を呼び出そうとすると、スタックします。Java String から CFStringRef を作成するにはどうすればよいですか?

これまでの私の試みは次のとおりです。

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

java - Rococoa での場所の無効なメモリ アクセス

私は rococoa (java から osx cocoa api ライブラリへ) を使用して簡単なスクリーンショット アプリケーションをコーディングしようとしてきましたが、実際にスクリーンショットを撮ってファイルに保存するところまで到達しました。残念ながら、アプリケーションが「場所のメモリ アクセスが無効です...」というエラーで失敗することがあります。参照を維持できていないため、これはガベージコレクションが原因であると想定しています。クラッシュの原因となっている行は次のとおりです: int[] data = pointer.getIntArray(0, bytesPerPlane / 4);

私は実際にはObjective Cで何もコーディングしておらず、rococoaで始めたばかりなので、これと混同しているだけです。以下の関連コードをコピーしました。これについて何か助けていただければ幸いです。


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

java - シャットダウン フックで kernel32.CreateToolhelp32Snapshot への jna 呼び出しにより VM がクラッシュする

スレッドが以下を使用してシャットダウン フックを設定する場合

メソッドを jna 経由で呼び出します。

VM がクラッシュします。で同じメソッドを呼び出すと、

フックを使用しても、呼び出しによって VM がクラッシュすることはありません。

理由はありますか?

VM クラッシュ エラー レポートの一部が役立つ場合は、投稿できます。

編集: Pastebin の VM クラッシュ レポートを参照してください

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

java - Delphi で Java から呼び出された DLL をデバッグするには?

Delphi を使用して、 JNA (Java Native Access)経由で Java から呼び出すことができる DLL を作成しました。この DLL のメソッドは単純な操作ですが、将来の使用とより複雑な呼び出しのために、DLL が Java から直接 (または Java IDE から) 呼び出される場合、Delphi デバッガをどのように使用できるか知りたいと思います。