- - PR -
Cで作ったDLL中の関数をJava(Servlet)からCallしたいですが
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2001-11-20 12:33
お世話になっております。
すでに存在している Cで作ったDLL(Win2000)中の関数を ~~~~~~~~~~~~~~~~~ Java(Servlet)からCallしたいですが どんな方法ありますか。 宜しくお願いします。 上野 |
|
投稿日時: 2001-11-20 16:18
Javaで外部命令の実行で説明されているように、java.lang.Runtimeクラスを使えばできるのではないでしょうか。
Servletでも実際には普通のJavaプログラムなのでできると思いますよ。 |
|
投稿日時: 2001-11-20 19:37
DLLの関数を使うということであれば、JNIを使うのが自然でしょう。
http://www.pigumer.gr.jp/JNISample.html |
|
投稿日時: 2001-11-20 21:01
あ、ごめんなさい。DLLでしたね。外部関数と間違えてました。 |
|
投稿日時: 2001-11-21 09:43
JNI以外の方法を考えてみます。
関数が単純で頻度も低いなら、exeでラップしてRuntime#execというのも現実的だと思います。 C/C++でCORBAオブジェクトを作って、そこからdllを呼び出すというのも考えられます。 WebサーバがIISならWebサービス経由でCOMを呼び出すという手もあるかもしれません。 |
|
投稿日時: 2001-11-21 19:42
みなさんこんばんわ
ほんとうにお世話になっております。 JNIを使って見ましたが 何故か Java ApplicaionからC++で造ったDLL中の関数をCallしようたしたら 「適当なNative関数を見つからない」エラーが発生しました。 本を調べたが原因はまだ分かっていません。 (Win200コマンドプロンプトにてこのDLLファイルの存在場所をpathにsetしていますし) ご存知の方ヒントを下さいませんか。 /****** Java code ********/ package doplayer; class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } } /****** C++ DLL code ********/ #include "stdafx.h" #include "HelloWorld.h" #include <stdio.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; } // ↑で生成したhello.dllを二つのディレクトリにCopyし(ファイルとディレクトリの構成は↓に示している通り) // Win200コマンドプロンプトにてこのディレクトリをカレントディレクトリにして H:\DLL\doplayer\HelloWorld.class H:\DLL\doplayer\hello.dll H:\hello.dll /////////////////実行メッセージ: H:\DLL>java doplayer/HelloWorld Exception in thread "main" java.lang.UnsatisfiedLinkError: displayHelloWorld at doplayer.HelloWorld.displayHelloWorld(Native Method) at doplayer.HelloWorld.main(HelloWorld.java:23) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Kawabe |
|
投稿日時: 2001-11-21 19:53
ごめんなさい
先のディレクトリの構成を訂正します。 誤: H:DLLdoplayerHelloWorld.class H:DLLdoplayerhello.dll H:hello.dll 正: H:DLL\doplayer\HelloWorld.class H:DLL\doplayer\hello.dll H:DLL\hello.dll ーーーーーーーーーーーーーーーーーーーーーー 上野 |
|
投稿日時: 2001-11-21 19:56
ごめんなさい
先のディレクトリの構成を再訂正します (度々申し訳ございません一つの'\\'が表示できなかったので)。 誤: H:DLLdoplayerHelloWorld.class H:DLLdoplayerhello.dll H:hello.dll 正: H:DLL/doplayer/HelloWorld.class H:DLL/doplayerhello.dll H:DLL/hello.dll ーーーーーーーーーーーーーーーーーーーーーー 上野 |
