- - PR -
「JVM起動を含むDLLをVC++で呼ぶ」について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-07-04 17:50
JVM起動とjava(jar)を呼び出す処理を含むDLLを
VC++で呼ぶことは可能でしょうか? DLLはLoadLibraryで読み込んでいるようですが DLL内のJNI_CreateJavaVMで処理が止まっているようです。 復帰コード等、取得できていないため 載せることはできませんが(-1)のようです。 〜〜〜ここからDLL〜〜〜〜〜〜〜〜〜〜〜〜 int main(argc, argv) int argc; char** argv; { JavaVM *jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption options[4]; vm_args.version = JNI_VERSION_1_4; options[0].optionString = "-Djava.compiler=NONE"; options[1].optionString = "-Djava.class.path=.;activation.jar"; options[2].optionString = "-Djava.library.path ="JavaのLibのパス"; options[3].optionString = "-verbose:jni"; vm_args.options = options; vm_args.nOptions = 3; vm_args.ignoreUnrecognized = JNI_TRUE; nResult = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); if ( nResult != 0 ) { printf("ERROR[%ld]\\n", nResult);←出ない } 〜〜〜ここまでDLL〜〜〜〜〜〜〜〜〜〜〜〜 〜〜〜ここからVC++呼び出し元〜〜〜〜〜〜〜〜〜〜〜〜 #include "Pdmstage_Api.h" HINSTANCE hDll; int ( __stdcall *OKiHo)(int,char**); void main(void) { int argc = 7; char* argv[a][b] ={"a","b","c","d","e","f","g"}; hDll = LoadLibrary("Pdmstage_Api.dll"); if( ! hDll ){ return; } OKiHo = (int(__stdcall*)(int,char**))GetProcAddress(hDll,"main"); if( ! OKiHo ){ FreeLibrary( hDll ); return; } int iRet = OKiHo(argc, *argv); if (iRet != 0) { FreeLibrary( hDll ); return; } FreeLibrary( hDll ); } 〜〜〜ここまでVC++呼び出し元〜〜〜〜〜〜〜〜〜〜〜〜 長くてすみません。 意味が通じなかったらすみません。 何卒よろしくお願いします。 環境 WinXpPro VC++6.0 java version "1.5.0_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05) Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing) |
|
投稿日時: 2007-07-04 17:57
補足です。
コマンドプロンプト(DOS窓)では 正常に動作します。 |
|
投稿日時: 2007-07-05 07:36
たぶん、外部プロセスの起動あたりでぐぐると大体の記述がみえてくるとおもいます。
VC++ でJavaを呼び出したいとのことですので。別の会議室のほうが回答をえられるかもです。 |
|
投稿日時: 2007-07-05 08:59
失礼いたしました。
別を探します。 |
|
投稿日時: 2007-07-08 23:02
JavaVMの起動についてであれば、別の会議室で回答を得られる可能性は薄いと思います。
(今回の問題が単にDLLの呼び出し方であれば別ですが・・・) DLL側とEXE側で同じ名前のmainを使って問題なかったでしょうか。 DLL側で外部から呼ばれる関数には、declspec(dllexport)といった指定を記述するか、 DEFファイルのEXPORTSで指定しておく必要があると思います。 コマンドプロンプトでは動作するとありますが、上述の疑問に対する解決をサンプル コードから読み取れないので、どこがどう問題か検証しづらい状況ですね。 |
1