すみませんがDLLの破棄方法(オブジェクトの開放)を教えてください。
FormをDLL化して使っているのですが、DLLの呼び出し終了後Disposeメソッドを使用してもうまく破棄できないようです。DLLがまだメモリ上に残っているようで消えているはずのDLLで定義した動きが現れます。
具体的にはGrapCityのInputManのファンクションキー部品を呼び出し元と呼び出し側(DLL)の両方で使っていて、DLLを消した後に呼び出し元でファンクションキーを押すとDLLで定義している動作になってしまいます。
DisposeメソッドはDLLの破棄ではないのでしょうか?"DLLの破棄"でネット上を探してもなかなかみつかりませんでした。何かご存知の方がいればご教授願います。GrapCityに質問すべき事象なのでしょうか?その切り分けさえも出来ていません・・・
アンレジストしてないとか?
regsvr32の/u オプションを付けコマンドプロンプト
から実行してみられては?
いな様ご回答ありがとうございます。
私自身あまり知識がないので質問の仕方が悪かったかも知れません。すみません。プログラムの実行中にDLLを破棄(オブジェクトの開放)をする方法を教えていただければと思います。
以前のVB6では、Set Object=Nothing なんてことをするとオブジェクトの開放が出来たと思うのですがそれに相当するものはないでしょうか?
Disposeがそれにあたると思ったのですが・・・
まず、用語を正しく使いましょう。これは、
「DLLの破棄」ではなく、
「COMオブジェクトの破棄」ですよね。
とりあえず、
System.Runtime.InteropServices.Marshal.ReleaseComObject
辺りを希望しているのでしょうが、そうする前にチェック
すべきこともあるように思えます。
> 具体的にはGrapCityのInputManのファンクションキー部品を呼び出し元と
> 呼び出し側(DLL)の両方で使っていて、DLLを消した後に呼び出し元で
> ファンクションキーを押すとDLLで定義している動作になってしまいます。
InputMan for .NETを使ったことはないので推測ですが。
GrapeCityのWebサイトの説明を読むと、「Fキー押下のフック機能」と
あります。
もし文字通りのフックなのであれば1プロセスの中でのイベント先の
差し替えになるはずですので、Formオブジェクトの解放と
フックの解放は無関係の可能性が大きいです。
たぶん使い方に特殊なセオリーがありそうですので、
マニュアルか同梱のサンプルに具体的な使用例をもう一度チェックしてみるとか。
動作に無関係だと思い込んで省略している部分がありそうです。
ついでに、たぶんFormをDLLにするなんてことをせずに、1プロジェクトに
呼出元/先のFormを用意した検証プログラムを作ってみる手もあります。
たぶんDLLを組み込まない単一のEXEでも同様の現象が発生する
可能性が高いと私は推測します。
そのへんを一度検証した上で、ほんとうに「オブジェクトの破棄」回りに
原因があるのかどうかを判断してみてはいかがでしょうか。
皆様貴重なご回答ありがとうございました。ご指摘の観点から再度調査をいたします。
ツイート | ![]() |