掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ActiveX EXEですでに作成済みのインスタンスを取得 (ID:102793)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
アパートメントスレッドモデルのActiveX EXEにおいて、後から起動したスレッドが、すでに作成済みのオブジェクトのインスタンスを取得する方法を探しています。 ActiveX EXEではクラスのInstancingを3-SingleUseにすると、2回目のオブジェクト作成で、自身のEXEがもう一つ起動するだけで、既存のインスタンスを返してくれません。 ActiveX EXEでは、標準モジュールのPublic変数は各スレッドごとの変数となってしまい、本当の意味でのPublic変数が作成できません。 このため、1つめのインスタンスが作成されたときに標準モジュールのPublic変数に自身を保持しても、他のスレッドからは見えず、他のスレッドが作成されたときに、既存のインスタンスの存在を確かめることができません。 (プロジェクトの種類をActive X EXE、スレッドモデルをオブジェクトごとのスレッド、スタートアップをSub Main、コンポーネントのスタートモードを独立型に設定、開発環境ではシングルスレッドで動作するのでコンパイルしてから実行) ----- Module Module1 Public Hoge As Class1 Sub Main If Hoge Is Nothing Then MsgBox "新規にインスタンスを作成" '既存のインスタンスがなければ作成 Set Hoge = CreateObject("Project1.Class1") 'しかし、このコードは必ず実行される。 Else MsgBox "既存のインスタンスを使用" End If Hoge.... End Sub ----- Class Class1 Private Sub Class_Initialize() 'インスタンスが作成されたら自身をグローバルに保持する(つもり) Set Hoge = Me End Sub 新しいインスタンスの作成元がすでに存在しているインスタンス自身であれば、新しいインスタンスに自身の参照を渡してやることで解決しますが、作成元が外部のプログラムなどである場合、すでに存在しているインスタンスの存在を確かめるすべがないのです。 起動時にファイルにフラグを立てるなどの方法で、すでにインスタンスが存在するかどうかだけなら確認できますが、既存のインスタンスを操作することはできません。 どなたか解決方法をお持ちでないでしょうか。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.