- ベストアンサー
DLLがどのプロセスからもアクセスされなくなった時の変数の値
プロセス(VBアプリなど)間で、フラグを参照(共有)するためのDLLがあるとします。 すべてのプロセスが終了した際、そのDLL内のフラグは0(ゼロ)に落ちるのでしょうか? というのも、あるVBアプリでDLLを介してグローバルでint変数のフラグを立てたり落としたりして、 二重起動禁止したいと考えております。(諸事理由にてFindWindowやApp.PrevInstanceでは実現不可だったため)。 VBアプリが起動時にDLLの共有関数を読みに行き、1なら起動終了。0なら起動。 VBアプリは終了時に0を書いて終わる。という処理です。 現状では上記処理をDLLではなく、セマフォファイル的にテキストファイル内で"1"や"0"にして、行っていたのですが、 何らかの理由で、1のままでプロセスが終了(ランタイムエラーなどの異常終了だと思います)してしまったようで、 デッドロック状態となり、VBアプリが二度と起動しないハメに陥ってしまいました。 もし冒頭のように、DLLにアクセスするどのプロセスも終了した際、DLL内のフラグが0に落ちてくれるのなら、 この現象は発生しないはず・・・と期待を込めての質問です。 実際に試してみればわかるでしょう・・・と言われそうですね。 わたしも10年以上昔、試して0になっていたように記憶してます。 しかし当時とはOSもVCのバージョンも変わりましたし、案件のアプリが業務のアプリなので、 根拠がないと、テスト時たまたま希望通りの結果が出ただけ・・・というのでは許されないため (しかも、上記のように既に客先でトラブルになっておりますので二度と失敗は許されません・・・(泣)。) みなさまにお尋ねしている次第です。 ご回答いただける方、できればなんらかの参考URLや出典情報なども添えていただけると大変ありがたいです。 以上、どなたかのご教示をお待ちしています。宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
お礼
maguro999さん回答ありがとうございます! CreateMutexも考えましたが、今回のように異常終了した場合、ミューテックスハンドルは解放されるのか(多分ハンドルなので解放されるんですよね)が心配です。 再度質問ですが解放されるんでしょうか?