Java からこのメソッドを呼び出す方法:
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
java から WinMain を呼び出すことは可能ですか? その関数の引数の値を、C++ プログラムを直接実行するときと同じにしたい。.dll
この関数をエントリポイントとする a をリンクしたい。
Java からこのメソッドを呼び出す方法:
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
java から WinMain を呼び出すことは可能ですか? その関数の引数の値を、C++ プログラムを直接実行するときと同じにしたい。.dll
この関数をエントリポイントとする a をリンクしたい。
複数の理由から、これは悪い考えです。
WinMain
特別ですmain
やのようDllMain
に、これらの関数には見かけ以上の意味があります。
単純なアプローチとWinMain
は反対に、スタックの「最初の」関数ではありません。これは、コード開発者が記述できる最初の関数です。しかし、デバッグに入ると、前後に多くのことが行われていることがわかりますWinMain
。
その中には、C++ グローバル オブジェクトの構築/破棄、atexit
C API に登録された関数などがありますが、Windows プラットフォームに固有の多くのことが起こっていることは確かです。
次に、それが の場合、WinMain
内部のどこかにメッセージ ループがある可能性があります。それはあなた自身のものと干渉する可能性があります (あなたの Java アプリケーションは GUI アプリですか?)
どのパラメータ値を指定しますWinMain
か?
最初の HINSTANCE パラメータは非常に重要で、起動しようとしている実行可能ファイルのコードで使用される可能性があります。ランダムな値をフィードして、それが機能することを期待することはできません。Java プロセスの HINSTANCE を取得することもできますが、結果が気に入らないのではないかと思います。
プログラムの WinMain の呼び出しに成功したとしましょう。このプログラムは、そこにいくつかのものがあることを期待します (WinMain
特別なセクションを参照してください)。その中にはGetCommandLine()
、C++ プログラムで使用できる API 関数の結果があります。
java から WinMain を呼び出すことは可能ですか? その関数の引数の値を、C++ プログラムを直接実行するときと同じにしたい。この関数をエントリ ポイントとする .dll をリンクしたい
エントリポイントが WinMain である DLL を「起動」しようとしていますか? どこかで何かが間違っていると思います。WinMain
またはmain
、DLL ではなくプロセスの Windows の標準エントリポイントです。DLL エントリ ポイントは通常DllMain
、異なるプロトタイプを持つものです。
Javaランチャーと同じプロセスで実行可能ファイルを起動する必要がある理由はわかりませんが、何か間違っていると思います。
JNAを介して可能になるはずです:
しかし、それでも私にはデザインの匂いがするように思えます... なぜ、Java プログラムから WinMain (標準の Windows アプリケーション エントリ ポイント) を呼び出したいのでしょうか? 代わりにRuntime.exec()だけではないのはなぜですか?