掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLのスレットからイベントを発生させるとメモリエラー (ID:63234)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VB6やVBAでメモリーエラーの発生について対応できました。 悩んでいる人がいましたら参考にしていただけるとうれしいです。 MFC ActiveX コントロール モジュール(OCX)が対象です AfxBeginThread等で下のスレッドを動かします。 終了時はスレットをSuspendThread()で止めてください。 void Thread(){ OLE_HANDLE hWnd; hWnd = COleControl::GetHwnd();//自分のコントロールハンドルを取得 while(TRUE){ ::SendMessage((HWND)hWnd ,WM_TCARD,123,0); Sleep(1000); } } 色々ウインドウズイベントありますが今回は WM_TCARD を利用しました。 スレットのループ内から自ハンドルにメッセージを1秒間隔で送ります。 メッセージには"123"がkeyに入ります。 このときVBに対してイベントを発生させます。 void CStcomCtrl::OnTCard(UINT key/*idAction*/, DWORD /*dwActionData*/) { if (key == 123) EventSec();//親(VB)に対してイベント発生 } ATL DLLで作ろうと試行錯誤したのですが、VB6でコントロールのハンドルがどうしても取得できなくてあきらめました。VB.Netでは取得できる。なぜ? スレッド一覧やウインド名からの検索も考えましたが、 自DLLからコントロールのハンドルを取得するのは難しいと思いあきらめました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.