お世話になります。
JAVAからJNI(Java Native Interface)を利用して、VC++で作成したDLLへアクセスしていま
す。
単純な処理ならば正常に処理を行うことができます。
しかし、VCのダイアログを表示しようとすると、画面が2秒程表示されJAVAアプリが異常終了し
てしまいます。
(表示されている間、マウスカーソルは砂時計表示となります)
VC側のダイアログを表示する為に特殊な処理が必要なのでしょうか?
このような現象についてご存知の方がおられましたらご教授の程よろしくお願い致します。
開発環境:
JAVA:J2SDK 1.4.2_03
Eclipse 2.1.2
VC:Visual C++ 6.0 SP5
OS:Windows2000 Professional SP4
追加で記述させて頂きます。
作成するDLLの種別がMFC共有DLLの場合、正常にダイアログを表示することができました。
ですが、拡張DLLだと同じ現象が発生します。
拡張DLLは呼び出す側もMFCを使っている場合しか使えません。
「拡張 DLL : 概要」
http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_core_extension_dlls.3a_.overview.asp
dairygoodsさん
ご回答有難う御座います。
確かにJAVAはMFCを利用しているはずもありませんので、拡張DLLは使用できませんね。
調べましたところ、ある本に『Vissual C++で作成したアプリケーションからしか使用できな
い』という記述がありました。
ですがその本にはその記述のみであり、使用できない理由まで書かれておりませんでした。
もし理由をご存知でしたらご教授頂けないでしょうか。
既にdairygoodsさんが書かれているリンク先に書いてあると思うのですが、
リンク先を読んで見られましたか?
> もし理由をご存知でしたらご教授頂けないでしょうか。
MSDNの解説では不充分でしょうか?
お世話になります。
MSDNの解説には使えないという事実のみが書かれている、と読み取りました。
何故使えないのか、という理由を知りたいのです。
もしご存知な方がおられたら...と思い尋ねた次第です。
多分、読み込み方が足りないと思います。
少なくともなぜそうなるのかがリンク先のページには書いてあります。
それでも足りないのであれば、拡張DLLの解説も読んでみましょう。
思うに実行ファイル側がMFCのDLLを使用していないと駄目というのは理由になっている
と思いますけれど、これでは理由として不十分なんでしょうか?
呼出側でMFCを利用していない場合、拡張DLLで使用するCWinApp派生クラスが渡せないから、と
考えてよろしいのでしょうか?
「MFC DLL 内で使用できない MFC クラスまたは関数」
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vccore/html/_core_initialize_regular_dlls.asp
> 呼出側でMFCを利用していない場合、拡張DLLで使用するCWinApp派生クラスが渡せない
から、と
> 考えてよろしいのでしょうか?
それは理由の一つであり、全ての理由はMSDNに細々と述べられている通りでしょう。
で、要約しようとするならば、
「拡張DLLは呼び出す側のEXEもMFCを利用していないとダメだから」
としか言いようがないと思うのですが。