- - PR -
JNIで変数を渡したい
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-17 22:09
お世話になります。
JNIで実装したいことは、ユーザIDを渡して、情報を受取るという事がしたいです。 現在ServretでJNIの実装をURLのサンプルを元に行っており 現在、DLL内でログ出力を確認するところまで出来ました。 更に、パラメータをIN、OUTが1つずつと戻り値のあるものにしたいのですが Servret からJNIへ渡す事が出来なくて困っております。 ネット上は、JNIソースの main()で変数を渡しているものしか 見つかりませんでした。 技術的には、可能なのでしょうか。 環境は、JDK1.4 + WebLogic + VC6 です。 参考になるサイトやアドバイスをお願いします。 | ||||||||||||
|
投稿日時: 2007-02-18 02:43
WebLogicは分かりませんが、純粋に技術的には可能です。 #でも、VC6はもう古いけど。。。 #JNIも昔からの技術だからそこら辺は変わりませんが。
サーブレットの場合でJNIを使う場合は別種の問題があります。 要するにDLLがどこにあるべきかという問題です。 それさえ解決しているのなら、次はシグニチャの定義問題が 多いのですが。 あとはWebLogicのサポートに聞くしかないと思いますけど。。
あの〜、「IN」と「OUT」と何が違うのでしょう。戻り値は戻るんですよね。 Javaにはポインタはないので、OUTはありません。 #と「基本」としては思ってください。 #もちろん技術的にはC的ポインタを管理することは可能です。 #問題はCかJava、どっちが管理すべきかはJNIでは決まりえないことだ。。。 | ||||||||||||
|
投稿日時: 2007-02-19 11:23
ご回答ありがとうございます。
>>サーブレットの場合でJNIを使う場合は別種の問題があります。 >>要するにDLLがどこにあるべきかという問題です。 呼び出せているので、配置は問題ないという認識です。 >>あの〜、「IN」と「OUT」と何が違うのでしょう。戻り値は戻るんですよね。 Cの感覚で書いてしまいました。 戻り値は、現在調査中です。 >>Javaにはポインタはないので、OUTはありません。 ということは、DLLで処理した結果は C的ポインタを利用しない限り、受取れないという事でしょうか。 | ||||||||||||
|
投稿日時: 2007-02-19 11:45
Cにも純粋な意味でのOUTパラメータなんてないわけですが・・・。 すみません。下らないツッコミですね。 | ||||||||||||
|
投稿日時: 2007-02-19 12:01
単にポインタをハンドラのように使いたいだけなら
private static final native boolean CryptAcquireContext(int[] phProv, String pszContainer, String pszProvider, int dwProvType, int dwFlags); のようにすればphProv[0]にハンドラが返されますよ。 | ||||||||||||
|
投稿日時: 2007-02-20 22:23
戻り値を返せるようになりましたので
実装できました。 文字コードの変換には少し手間取りましたが・・・ ありがとうございました。 | ||||||||||||
|
投稿日時: 2007-02-27 20:00
すでに解決済みなので、単なる補足ですが。
1) Cソース側は #define UNICODE しておくとpEnv->GetStringChars,pEnv->ReleaseStringChars でそのまま文字列が使えますよ。 2) http://community.java.net/projects/community/jdk にjnaというライブラリがあって、簡単なAPIならCソースを 作らずにそのまま呼べますよ。 (私はCソースを自動生成してますが。) これは情報というより前に少し悩んだまま、忘れてしまっていた ことですが、/clrをつけて作成したDLLをjnaで呼び出そうとしたら 失敗してしまいました。たぶんjava.exeが/clrつけてないのだと 思っています。 |
1