掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッド内からVBの関数をコールバックするには (ID:60851)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
みなさんこんにちは。 いま、VBとVCの両方使いで、掲題の件で悩んでいます。 見苦しいですが、下記ソースを作成しましたが、 うまくいっていません。 環境: WindowsXP VB6.0 SP6 VC++6.0 SP4 (DLLは、/MTオプションで、マルチスレッドで 作成) ↓--- VB側 --- 'test.frm Private Declare Sub SetDebugCallBack Lib _ "test.DLL" (ByVal CallBack As Long) Public Sub mInitLine() Call SetDebugCallBack(AddressOf DbgHandler) End Sub 'test.bas Public Sub DbgHandler(ByVal aaaa As String) Debug.Print aaaa DoEvents End Sub ↑--- VB側 --- ↓--- dll側(VC) --- 'test.h _bstr_t dbuf; char buff[200]; void (__stdcall *debugproc)(BSTR buf); COM_API void __stdcall SetDebugCallBack( void (__stdcall dbgfunc)(BSTR buf) ); 'test.cpp COM_API void __stdcall SetDebugCallBack( void (__stdcall *dbgfunc)(BSTR buf) ) { debugproc=dbgfunc; } 'test.cpp(スレッド起動を行う関数) COM_API void __stdcall StartLine(void) { pThread = _beginthread( SerialRxThread, 0, NULL); ※1{ sprintf(buff,"Thread Running..handle is %ld", pThread); dbuf=buff; debugproc(dbuf); } } 'test.cpp(スレッド用の関数の内部) void SerialRxThread(void* dummy) { : : : ※2{ sprintf(buff,"thread(): xxx=%d", sts ); dbuf=buff; debugproc(dbuf); } : : : } ↑--- dll側(VC) --- ※1 VBで、F5キーで実行するときと、EXEにしてから実行する場合で 両方で動作を確認しています。 ※2 VBで、F5キーで実行するときは動作しますが、EXEにすると アプリケーションエラーが発生します。 スレッドの内部と、スレッドを起動した側とで同じ関数ポインタを 使っているのですが、なぜかVBプログラムをEXEにしたときだけは、 ※2の方でアプリケーションエラーになってしまいます。 (不便をかけて申し訳ありません画面) スレッド内では関数ポインタ(で示される先)を持つためには何か 仕組みいるのでしょうか? (ちなみに、※2の部分をはずすとスレッドは動作します)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.