問題タブ [native-methods]
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.
winforms - アンマネージ例外のソースを特定するにはどうすればよいですか?
HTML 編集機能を提供できるようにしたい WinForms アプリケーションがあります。そこで、Lutz Roeder の HTML Writerを C# から VB.NET に変換し、それを Windows フォームからカスタム ユーザー コントロールに変換しました。これは現在、MDI 子フォームでホストされています。
親 MDI を閉じるまではすべて問題なく動作しますが、親 MDI を閉じるとクラッシュし、例外をトラップできません。
エディター コントロールを、他に何もしない小さなバニラ WinForms アプリに分離し、問題が引き続き発生することを確認しました。
アンマネージ コードのデバッグもオンにしました (VS2010 を使用し、x86 および Framework 3.5 用にコンパイルしています)。得られるのは次のとおりです。
私が気付いた唯一のことは、エディターを含むフォームを開いた後、長い間隔を空けても、クラッシュしないことです。
私が本当に感謝しているのは、この問題を探す方法についてのアイデアです。もちろん、C# から VB への変換を間違えたのかもしれませんが、どこを見ればよいのかわかりません。
編集:
デバッガーをアタッチしてアプリを実行しましたが、何も役に立ちません。
Windows の「アプリケーションが動作を停止しました」というメッセージが表示され、問題の詳細に次のように表示されます。
アクセス違反であることがわかりますが、Debug > Exceptions > Win32 Exceptionsに移動してc0000005にチェックを入れても、壊れたときに何も役に立ちません-「利用可能なソースがありません」だけです。
c# - ネイティブの名前付きパイプとSystem.IOの名前付きパイプの間で複数のメッセージを送信する
ネイティブの名前付きパイプとSystem.IOの名前付きパイプの間で複数のメッセージを送信する必要があります。この通信の両端のコードは、オールインワンコードフレームワーク(IPCおよびRPC)から取得しました。
サーバ:
} catch(Exception ex){Console.WriteLine( "サーバーがエラーをスローします:{0}"、ex.Message); }最後に{if(hNamedPipe!= null){hNamedPipe.Close(); hNamedPipe = null; }}
クライアント:
上記の「クライアントからサーバーにリクエストを送信する」セクションのforループからわかるように、サーバーに複数のメッセージを送信する方法を理解しようとしています。NativeMethod.ReadFile()メソッドがtrueを返すまで、サーバーコードがループすることがわかります。私の問題は、最初のメッセージが読み取られた後は常にtrueを返し、2番目のメッセージを無視することです。したがって、私の質問は、具体的には、このメソッドがfalseを返すように、クライアントコードで何をする必要があるかということです。 2番目のメッセージ。
java - Object[][] の Java フィールド記述子
メソッド記述子内の Object[][] のフィールド記述子は何ですか? クラス foo.bar.Class が存在し、メソッドが Class[][] を取るとします。
http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#14152
またはJNI仕様私の理解では、それはそうあるべきだということです
しかし、それは「[foo.bar.Class」の配列に評価され、もちろんjava.lang.NoClassDefFoundError
.
「内部」配列はおそらく java.lang.Object と見なされるべきであり、その結果、
?
java - javaからアセンブリ言語コードで書かれた関数を呼び出す方法は?
こんにちは、アセンブリ言語コードを Java に組み込みたいと思います。アセンブリ言語は私にとって初めてなので、hello world のようなアイデアとサンプル プログラムを教えてください。
java - 動的WebプロジェクトでJNIを使用するにはどうすればよいですか?
ポートにアクセスするためのネイティブメソッドを作成しました。単純なJavaプロジェクトでJNIを実行できます。ただし、Webプロジェクトで実行しようとすると、次のような例外が発生します。
スレッド"main"java.lang.UnsatisfiedLinkErrorの例外:
java - Java での ZIP ベースの圧縮ファイルの管理
Java は、ZIP ファイル内に圧縮されたファイルをナビゲートして操作する機能をネイティブにサポートしていることを知っています。それが JAR ファイルです。これを利用して ZIP ベースのファイル (プログラムの状態を保存するため) を作成および管理するにはどうすればよいですか?
私が取り組んでいるプロジェクトは、外部ライブラリなしで目標を達成することを目指していることに注意してください。すべてのライブラリーは、Java 1.6 または 1.7 に既に組み込まれている必要があります。
java - JVM がホスト環境でネイティブ メソッドを呼び出す方法
最近、私は Java Native Interface について読んでいます。ところで、疑問があります。たとえば、Java プログラムで I/O 操作を行う必要がある場合、I/O 操作用の Java API を実行します。さらに、低レベルでは、OS レベルの I/O 処理にマップする必要があります。問題は、Java API がホスト オペレーティング システムのネイティブ I/O メソッドとどのように相互作用するかです。
一言で言えば、JDKのいくつかのメソッドがネイティブに実装されていると聞きました.それらのネイティブメソッドがJava APIによってどのように呼び出されるか.JNI(Java Native Interface)になると思います.
誰かが私の疑問を明確にしてくれませんか。
ありがとう
ヌワン・アランバージ
android - Android mupdf libmupdf.soランタイムエラー「ネイティブopenFileの実装が見つかりません」
Macでmupdf.comからmupdfのコンパイルを完了しました。それを理解するのに少し時間がかかりましたが、今では libs/armeabi フォルダーに libmupdf.so があります。
彼らはここで見ることができるMuPDFCore.javaと呼ばれるこのクラスの例を提供します: http://mupdf.com/repos/mupdf/android/src/com/artifex/mupdf/MuPDFCore.java
プロジェクトでこのクラスを使用しましたが、LogCat で次のように表示されます。
lib /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050 を読み込もうとしています
共有ライブラリ /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050 を追加しました
/data/data/com.myapp.android/lib/libmupdf.so 0x4070e050 に JNI_OnLoad が見つかりません。init をスキップします
ネイティブ Lcom/myapp/android/viewer/MuPDFCore;.openFile (Ljava/lang/String;)I の実装が見つかりません
DEBUG/AndroidRuntime(27523): VM をシャットダウンしています
WARN/dalvikvm(27523): threadid=1: キャッチされない例外で終了するスレッド (group=0x400ee760)
エラー/AndroidRuntime(27523): 致命的な例外: メイン
エラー/AndroidRuntime(27523): java.lang.UnsatisfiedLinkError: openFile
ライブラリがロードされていることを知る限り、ライブラリをコンパイルする方法を理解する前に、ライブラリがクラッシュし続け、「mupdf」がヌルリンクであると言いました。
彼らの例は、openFile がネイティブ関数であることをほとんど示しています...これを理解したと思ったとき、別の問題が発生しました。私は一日中それに取り組んできました。どんな入力でも素晴らしいでしょう!
悪いコンパイルですか?ターミナルでエラーは発生しませんでした。
glassfish - Glassfish3.1でネイティブ.soを使用する方法
ネットワーク統計を表示する組み込みデバイス用のWebインターフェイスを構築しようとしています。Glassfish 3.1 Application Serverを使用していますが、jnetpcapを使用してネットワークトラフィックをリッスンしたいと思います。jnetpcapはlibpcapネイティブライブラリに依存しています。Glassfishでのネイティブライブラリの使用に関するOracleのドキュメントを見つけようとしましたが、探しているものがまだ見つかりません(間違ったものを探している可能性があります)。
サーブレットがロードされると、次のように失敗します。
原因:java.lang.NoClassDefFoundError:クラスorg.jnetpcap.Pcapを初期化できませんでした
これは、クラスローダーがクラスを見つけることはできるが(デプロイ時にライブラリとして指定した)、ロードできないことを意味すると解釈します。私の最初の推論は、それがセキュリティポリシーの問題であったか、jvmがlibpcap.soを見つけられなかった可能性があるというものでした。
Configurations-> server-config-> jvm-settingsを使用して、管理コンソール(つまり、Webインターフェイス)でsystem.library.pathのパスを設定しました。[パス設定]タブで、パス'/usr/bin/libpcap.so'を[ネイティブライブラリのパスサフィックス]フィールドに入力します。Glassfishサーバーを再起動すると、次のメッセージが表示されました。
[#| 2011-03-31T13:30:13.962 +1100|警告|glassfish3.1| null | ... GlassFishConfigBean.com.sun.enterprise.config.serverbeans.JavaConfig}、reason=JavaConfig属性「NativeLibraryPathSuffix」が「null」から「/usr/bin/libpcap.so」に変更されました。=1301538613961|#]
その後、ログでネイティブライブラリパスがパス出力に表示されます
-Djava.library.path = ... /usr/lib64:/lib64:/lib:/usr/lib:/usr/bin/libpcap.so
したがって、ネイティブライブラリは正常にロードされていると思います。ネイティブライブラリが実際にロードされていることを確認する方法はありますか?
また、セキュリティマネージャを無効にしました(当面の間、サーブレットを機能させるためです。動作したら、より微妙なセキュリティポリシーを実装する予定です)。これでも問題は解決していません。
ネイティブライブラリを正しくロードしようとしていますか?ネイティブライブラリがロードされているかどうか、およびorg.jnetpcap.Pcapクラスを初期化できない理由についての詳細を知るにはどうすればよいですか?
ありがとう、ティム
c - OCamlライブラリでコードを1回だけ実行する
私は、ライブラリを使用するプログラムの存続期間中に1回だけ実行する必要がある初期化コードを持つOCamlライブラリを作成しています(そして、プログラムの存続期間中持続するが、ライブラリ自体の中でのみ使用される状態を保存します)、およびライブラリを使用するプログラムが終了するときにのみ実行する必要があるいくつかのクリーンアップコード。
関連性がある場合、私のライブラリは2つの部分に分かれています。低レベルのCライブラリへのインターフェイスと、それを使用したプログラミングを容易にするための高レベルのものです。Cのどこかで必要なことを実行できますか?理想的には、私のユーザーはそれがどのように実装されているかを気にせず、Cビットを見ることはありません。
Pythonでは、コードを実行してこれを行いますimport
が、OCamlopen
は実際には何も実行せず、モジュールの名前空間、次にPythonの名前空間をatexit
シュガーしますが、Ocamlに相当するものが見つかりません。
私が検討したアプローチの1つは、ライブラリを「フレームワーク」として構造化することですが、そのような過剰に設計されたアプローチを正当化するほど重要ではないと思います。ありがとう!
更新:わかりました-わかりました-私は思います。終了時のクリーンアップを処理するためにCコードを使用していますが、コードを少し操作したので、C側にグローバル状態へのポインターがあります。
私の図書館には今持っているように見えます
そして、それがopen
メインプログラムによって実行されると、これは実行されます...しかし、どのように?