問題タブ [jniwrapper]

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 投票する
0 に答える
91 参照

pointers - SWIGTYPE ポインター値の割り当てが遅い

SWIG を使用して、JNI を介して Java の特定の c++ コードをラップしています。

Javaで私が持っている

そして、配列を C++ に渡しますが、 n が大きく、これを 1000 回実行する必要がある場合、非常に遅くなります ....

これを行うためのより速い方法はありますか?具体的には、Java で配列を作成し、すべてを一度に c++ に渡す方法はありますか?

ありがとう

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

java - C構造の次の要素をJavaにマップするにはどうすればよいですか?

Javaにマップする必要がある次のC構造があります。C コードから生成された DLL からメソッドを呼び出す必要があるためです。以下は私の構造です。

IPJ_READER_CONTEXT と IPJ_READER_IDENTIFIER は以下のようになります。

これらの 2 つの要素を解析して Java にマップするにはどうすればよいですか? ご意見をお聞かせください。

0 投票する
0 に答える
421 参照

java - メソッドのシグネチャがわかっている場合は、DLL ファイルの .h ファイルを作成する

Java で DLL ファイルのメソッドにアクセスしようとしています。

ComfyJを使用して DLL ファイルのラッパーを作成したいと考えていました。ComfyJ にはこのためのウィザードがありますが、DLL ファイルを選択すると、この種の DLL ファイルは使用できないと表示されます。

COM 用の ComfyJ ウィザード

というわけで、次にJNIWrapperウィザードを使ってみましたが、.hファイルが必要です。.h問題は、この DLL 用のファイルがないことです。

JNIWrapper には .h ファイルが必要です

(私はこれら両方のツールの商用ライセンスを持っています)。

.h特定の DLL ファイルのファイルをエクスポートまたは作成する方法がないことに少し驚いています。インターネットを検索しましたが、これを実行できるツールが見つかりませんでした。これにより、DLL ファイルには含まれていないが、このファイルを作成するために必要な情報がまだ不足しているように感じ.hます。

次に、すべてのメソッド名、パラメーター、および戻り値の型を実際に知っています。これは、WinApiOverrideツールがそれらを一覧表示できるためです。アプリケーションの実行中に、この DLL ファイルの関数/メソッドに渡されるパラメーターを確認することもできます。

ですから、必要な情報はすべて揃っているという印象を受けました。深く掘り下げる前に...私の質問:メモ帳を使用して手動でこのファイルを作成することは可能だと思いますか?.h

法律上の注意: この DLL ファイルは、プリインストールされた DLL ではありません。これは、有効な商用ライセンスを所有している商用アプリケーションの一部です。同社は、私が個人的な目的でのみ使用する限り、DLL ファイルを自由に使用できると言っています。

編集:

また、jniwrapper コードを自分で作成しようとしました。結果は次のようになります。

結果は派手な例外です:

その奇妙なメソッド名は正しい形のようです。メソッド名が奇妙に見えます。これは、C++ が dll ファイル内のファイル名を「エンコード」するためであることがわかりました。?FooAddBar@@YA_NHHH@Z実際にはありbool FooAddBar (int, int, int)ます。

それにもかかわらず、JNIWrapper はエンコードされた名前を好むようです。短い名前"FooAddBar"やその他のものを試してみると、メソッドが見つからないため、すでに例外が発生しているためです。一方、エンコードされたメソッド名 (つまり"?FooAddBar@@YA_NHHH@Z") を使用すると、メソッドが見つかり、正しいメソッドであることが証明されます。

ただし、呼び出し中に、問題が発生します。だから、私は間違ったパラメータか何かを使用していると推測しています。明らかに、私は何か間違ったことをしており、JniWrapper ウィザードがこれを修正する正しいラッパーを作成できることを望んでいます。(ただし、その場合、.hファイルが必要です)。