• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6のメッセージフックについて)

VB6のメッセージフックについて

このQ&Aのポイント
  • VB6SP6、XPの環境でSDI形式のアプリケーションを組んでいます。MainのフォームがFormLoad()でSetWindowLong()その後、VC++のDLLを起動すると、そのDLLからWM_USER+XXXが送信されてきます。しかし、WndProc内にText1.Text="ABC"とコーディングすると、Mainのフォームが新たに起動されてしまいます。この問題を解決する方法はありますか?
  • VB6SP6、XPの環境でSDI形式のアプリケーションを組んでいます。VC++のDLLから送信されるWM_USER+XXXメッセージを受け取って、Mainのフォームのテキストを更新するために、WndProc内にText1.Text="ABC"とコーディングしました。しかし、このコーディングを行うと、Mainのフォームが新たに起動されてしまいます。どのようにすればこの問題を解決できるでしょうか?
  • VB6SP6、XPの環境でSDI形式のアプリケーションを組んでいます。VC++のDLLから送信されるWM_USER+XXXメッセージを受け取って、Mainのフォームのテキストを更新するためのWndProc内のコーディングに問題があります。コーディング内にText1.Text="ABC"を追加すると、Mainのフォームが新たに起動されてしまいます。どのようにすればこの問題を解決できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

ちょこっと試して見ましたが、下記のようなコードはコンパイルエラーになりますよ。 Text1.text = "ABC" 『変数が定義されていません』とメッセージが出て。 もしかして、本来のコードは下記のように書いていません? MainFrm.Text1.text = "ABC" もしそうであれば、以下のような状態が考えられます。 Sub Mainから起動している。 また、Sub Main内で、以下のような方法でフォームを開いている。 Sub Main()   Dim MainWindow As MainFrm   Set MainWindow = New MainFrm   MainWindow.Show End Sub 上記の方法では、MainFrmを雛型として、新たなフォームインスタンス"MainWindow"を作成しています。 その作成されたフォームインスタンスの構成要素(フォームのプロパティや、その中のコントロールなど)にアクセスするためには、そのフォームインスタンスへアクセスする必要があります。 MainFrmは雛型になっただけで、そのインスタンスは存在しません。 WindProc内で、 MainFrm.Text1.text = "ABC" と呼び出された際に初めて、VBによって自動的にインスタンスが作成されます。 もし上記の形そのままであれば、Sub Main内で関数ローカルの変数を使用しているため、外部からはアクセスできない、まずはそれを解決します。 Public MainWindow As MainFrm Sub Main()   Set MainWindow = New MainFrm   MainWindow.Show End Sub ※Sub Mainと、WndProc()を同一の標準モジュールに置く場合は、MainWindowはPrivateで宣言しても大丈夫です。 次に、WndProc内では未作成のインスタンスMainFrmではなく、自分で作成したMainWindowインスタンスへアクセスするように変更します。 Public Function WndProc(...) As Long   If msg = WM_USER+XXX Then     'MainFrm.Text1.text = "ABC"     MainWindow.Text1.Text = "ABC" '作成したMainWindowへアクセスするように変更する。   End If End Function 不足情報を推測で埋めたため、はずしている可能性はありますが、以上です。

SuperRINTA
質問者

お礼

ありがとうございます。 ご推察の通りです。 なるほど、普段はVC++で作成していたので 自動でインスタンスが簡単に作られてしまっている ことに気が付きませんでした。 オブジェクトのポインタを引き回せれば回避できたのですが VBではそれも適わず苦労しておりました。 インスタンスを保持しておけば新たに作られないようです 修正し確認できました、ありがとうございました。

関連するQ&A