マッピングとは?JavaでCと併用したいので、JNAを使用しています。

このQ&Aのポイント
  • マッピングとは、CをJavaのインターフェースでオブジェクト化することを指します。
  • インターフェースを使用しないとマッピングできないのは、Cのソースコードを読み込んで処理するためです。
  • JNAを使用することで、JavaからCの関数を呼び出すことやCのデータ構造をJavaで使用することができます。
回答を見る
  • ベストアンサー

マッピングとは?

javaでCと併用したいので、JNAを使用しています。 使えるようにはなったのですが、定義がイマイチ良く分からないので、質問します。 ズバリ、マッピングとはなんですか?! 調べると、Cをjavaのインターフェースでマッピング。と説明されるのですが、 マッピングとはつまり、Cをオブジェクト化できるということでしょうか?? そして、なぜ、インターフェースでなければ、マッピングできないのですか?? あと、Cの処理内容をどこが行っているのですか?? ただ単に、Cそのものを動かして結果だけをとっているのでしょうか? それとも、インターフェースがCのソース内容を読み込んで、 インターフェースがCの代わりに処理しているのでしょうか? それが、マッピングということなのでしょうか?? ややこしい文章で申し訳ありません。 とても困っています。詳しい方がいましたら、どうかよろしくお願いいたします。

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

マッピングとは対応付けのことです。JNAでは以下の対応付けをユーザーが行う必要があります。 ・ライブラリのマッピング: ネイティブのライブラリ (.so, .dllなど) とJavaのインターフェイスの対応 ・APIのマッピング: ネイティブの関数をJavaからどういう名前で呼ぶかの対応 ・データ型のマッピング: ネイティブの関数の引数や返値の型をJava側のどのような型に結びつけるか (単純な型については予め決まっています) >Cの処理内容をどこが行っているのですか?? >ただ単に、Cそのものを動かして結果だけをとっているのでしょうか? その通りです。 そのため、CのコードをコンパイルしたネイティブのライブラリをNative.loadLibrary()で指定する必要があります。

Ratimisu
質問者

お礼

そうでしたか>< ありがとうございます!

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

>マッピングとはなんですか?! 用語の定義としてということなら、 マッピングとはあるものを別のものに対応付けること。 数学で習うところの写像ってやつです。 たとえば、CのFile構造体、fopen()、fclose()について、JavaのMyFileクラス、MyFile.open()、MyFile.close()みたいのを定義して、MyFileではCのライブラリをネイティブ呼び出しするみたいなコードを書けば、CのライブラリをJavaにマッピングしたと言えるでしょう。 そういう一般的な言い方をするもので、「ズバリ、マッピングとはこれである」みたいな厳密な唯一の定義というのは多分存在しないかと。

Ratimisu
質問者

補足

それは、つまり・・・結局Cも動いているんでしょうか・・・? それとも、Cと同じ動きをJavaが行っているのでしょうか?;;

関連するQ&A

  • JNAで関数ポインタの表し方

    JNAで関数ポインタの表し方 JNAを利用してC言語の関数をJavaで利用したいのですが、その関数の引数に関数ポインタが含まれていて、使い方が分かりません。 関数ポインタ型のJavaのマッピングはどうすればいいのでしょうか? つまりJavaの特定のメソッドをその関数内からコールバックさせたいです。

  • JNAでc言語ファイルの読み込み方が分かりません

    JNAでc言語ファイルの読み込み方が分かりません JNAを使用して、javaからcを読み込み動作するプログラムを作っています。 なんとなく定義は分かってきたのですが、 javaのソースコードに CLibrary.INSTANCE.printf(); のように、c言語を書き込んでいる状況なのですが、 JNAを利用した.javaファイルから.cファイルを読み込む方法はありますか? c言語の場合、.cファイルごとに分割された関数をmainが呼び出すとき、 extern void Sample(); とプロトタイプ宣言の後に Sample(); で呼び出せるみたいなので、 これを使って、 CLibrary.INSTANCE.extern void Sample(); とやってみましたが、コンパイルできませんでした;; 他にやり方がありますか? 知ってる方がいらっしゃいましたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • RequestDispacherインターフェイスのことを知っている方がいたら・・

    マニアックな質問なのかもしれませんが・・ インターフェイス及び抽象メソッドの定義は ●インターフェイスに定義されているメソッドは必ず抽象メソッドである ●抽象メソッドにはメソッドのプロトタイプだけが定義されている だと思うのですが、 RequestDispatcherインターフェイスのforwardメソッドには既に 「サーブレットから他のリソースへ、requestオブジェクトとresponseオブジェクトを転送する」 という処理内容が定義されているように思います。>java.sun.comのapiドキュメント これってインターフェイスの原則から外れていると思うのですが、 どうなのでしょうか。「例外」もあるってことなんでしょうか。 おひまだったら解答をお願いいたします。

    • ベストアンサー
    • Java
  • インターフェイスの使い方がわかりません(初心者です)

    Javaを始めたばかりの初心者です。 「やさしいJava」を買って一通り学んだのですが、 インターフェイスの使い方がよくわからず、困っています。 インターフェイスを実装することでインターフェイスが持つメソッドがすべて定義されてることが保障される、 というのはわかるんですが、そのことがどうして有用なのでしょう? また、具体的にはスレッドを扱うときにRunnableインターフェイスを実装する理由がわかりません。 Threadクラスのオブジェクトを作成するときに、 Runnableを実装したクラスのオブジェクトの変数を 引数にしないといけないんですよね? このとき、Runnableインターフェイスが 「runメソッドが定義されていなければならない」 とだけいうものだったとしたら、 Runnableを実装してなくてもrunメソッドさえ定義してあれば 実行できそうな気がするんですが・・・

    • ベストアンサー
    • Java
  • サーブレットのマッピングについて

    サーブレットのマッピングについて教えてください。 現在サーブレットを学習しています。 書籍に付属するサンプルをとりあえず動かしている段階なのですが、マッピングがうまくいきません。 http://localhost:8080/エントリポイント/servlet/MyServlet とアドレス入力した場合はきちんと表示されるのですが、WEB-INF直下にweb.xmlファイルを作成して http://localhost:8080/エントリポイント/servlet/ms にアクセスすると404エラーが返ってきます。 これは何が原因なのでしょうか? 知識不足もあって皆目検討がつかないため、皆様のお力をお借りしたく思います。 よろしくお願いいたします。 なお、サーブレットはWEB-INF直下のclassesというディレクトリ内にコンパイルしておいてあります。 また、web.xmlの内容は以下のとおりです。 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <!-- MyServlet→msと定義する --> <web-app> <servlet> <servlet-name>ms</servlet-name> <servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ms</servlet-name> <url-pattern>/classes</url-pattern> </servlet-mapping> </web-app>

    • ベストアンサー
    • Java
  • C#のdelegateをC++とjavaで?

    C#のデリゲードを javaとC++でできないでしょうか。 ただし、質問内容を勘違いされそうなので、求めている内容と、 求めていない内容を、詳しく 書きますと。 インタフェース委譲を使った例は、求めていません。 あらかじめ、委譲先に静的に仕組みを 作っておかなく手も、C#のデリゲードのように、シグニチァが同じなら 委譲先をはめ込めれるのが欲しいです。 単なる関数ポインタの例は、求めて いません。 C#でdelegate型を引数にとる ところに、あるインスタンスの メソッドを渡すと。 どのインスタンスのどのメソッドかまで、 認識して、コールバックできます。 関数ポインタでは、これができない。 STLの関数オブジェクトとか、古い感じの情報にヒントがあるか。調べてみましたが。よくわかりませんでした。 結局、この関数オブジェクトは、僕が求めているモノとは、違うような気がします。 よくわかりませんが。 欲しいのは、どのインスタンスのどのメソッドかまでを特定して、 記憶できる型をどうやって javaや、C++で実装できるか。 それをインタフェース委譲のように、 委譲先にあらかじめ、仕込んでおくことなしに。 ただ、メソッドのシグニチァが同じであるだけで、どのインスタンスのどのメソッドかまでを特定して記憶できる C#のデリゲードのような型を。 特殊なコンポーネントを利用せず。 標準的な言語構文のみをつかって、 どのようにしたら、 javaや、C++で、実装できるか? です。 詳しい方が、いらっしゃいましたら、 教えてください。

  • オブジェクト自身のバイナリファイルからのインスタンス化は可能?

    ある情報の塊として存在する任意のオブジェクト(インスタンス化されたクラス)そのものをバイナリ化してファイルに落とし、再びそのファイルからもとのオブジェクトそのものを復旧させる処理はJavaでは可能なのでしょうか? 可能であれば、それはどのように行うのでしょうか? Import・Export(インスタンス化/バイナリファイル化)相互作用をサポートする既存インターフェースがJavaには存在するのでしょうか?

    • ベストアンサー
    • Java
  • ASP.NETでURLにマッピングされたして、プレーンテキスト返却モジュール

    質問の意図。 現在、Ajaxの学習を深めています。 javascript側のrequestオブジェクトのopen()メソッドの 第1引数のURLは単なるテキストストリームを 返すものであれば何でもよいことがわかりました。 1) 単なる、CSVなどのテキストデータを静的にWebサイトに配置。 2) CGIでPerlや、Java Servletでresponse.println( 等で、 単なるテキストデータを返す。 上記(1),(2)のような別に画面とか、HTMLとか関係ないような サーブレットのようなもの(JSPとかからまない)ものに 対応するURLを javascript側のrequestオブジェクトのopen()メソッドの 第1引数として、 渡せばよいらしいです。 ところが、Visial Studio上で作成した。 aspx + コードビハインドの構成だと、 はじめから、aspx上に、HTMLのコードが入っています。 Visual Studio 上のC#, VBで、インテリセンス機能を効かせながら 作れるモジュールで、URLとマッピング可能なモジュールで、 かつ、 Java Servletの単なるresponse.println( するだけのような純粋なプレーンテキストを吐き出すモジュールは どのようにして、作るのでしょうか?

  • 【C#/Java?】try-catchでcatchせずにfinallyは一般的?

    普段はJavaを使っているのですが、故あってC#のソースを簡易レビューすることになりました。 C#を始めてそれほど間もない人間の書いたソースなのですが、以下のようなソースをたびたびみかけます。 try {   // 処理 } finally {   // finally処理 } C#の場合、Javaとは異なり全ての例外はJavaで言うところの非チェック例外であると認識しています。(ただし、Javaの非チェック例外と同じ扱いをしていいとは思っていませんが……) 呼び出し元に起きうる全ての例外処理を任せるがfinally処理をしたいならば、このような書き方をするのが一般的なのでしょうか。 Javaの場合でもこのような書き方ができることは確認しましたが、Javaの場合は非チェック例外が起きる=バグであることがほとんどなので、このような書き方をする場面はあまりないように思います。 (もちろんチェック例外もthrowsを書けば同じように書くこともできるとは思いますが、自分ならやらないですし、そのようなソースを見たこともないです) ですので、単に自分がJavaを普段使っているからcatchがないことに違和感を感じるだけなのであれば、この問題はスルーしたいと思います。 C#経験者が周りにいない状況ですので、皆様のお知恵をおかりしたいと思います。よろしくお願いします。

  • MapViewOfFileについて教えて下さい

    C言語の初心者ですが、ファイルマッピングについて教えて頂きたいことがあります。 あるファイルをMapViewOfFileを使用し、複数タスクの共有メモリとして使用中に、 クローズせずに再マッピング(?)みたいなことはできないでしょうか? 例えば、マッピングするAというファイルの内容が、変数A=0、変数B=0、変数C=0、としてOpenFileMapping(FILE_MAP_ALL_ACCESS)されている。 次に、Bというファイルの内容が、Aファイルと変数名は変わらずで、 変数A=1、変数B=1、変数C=1、とします。 ここでAファイルをクローズ(他タスクが参照するかもしれないので)せずに、 AファイルをBファイルの内容にしたいということなのです。 こんなことは、やはりできないのでしょうか? もちろん、Aファイルがマッピングされているので、直接Aを変更すれば良いのですが、 ファイル内容が膨大なため、なんとか再マッピング(?)できればと思ったのです。 OSはWindows2000で、VC6.0になります。 わかりにくい文章で申し訳ございませんが、よろしくお願いします。

専門家に質問してみよう