VBのコントロールをDLL(C)から制御するには?


比嘉@糸満  2003-11-17 14:20:15  No: 109998  IP: [192.*.*.*]

こんにちは。
VBとCを独学している比嘉と言います。

VBのコントロールをDLL(C言語)に渡してDLL内でコントロールを制御
することは可能でしょうか。
例えば、VBのテキストボックスのハンドルをDLLに渡して、DLL内で
テキストボックスに文字を書き込むとか出来ますか。

コントロールの渡し方とDLL内での受け取り方がわかりません。
アドバイスお願いします。

編集 削除
比嘉@糸満  2003-11-17 14:22:12  No: 109999  IP: [192.*.*.*]

すいません。この質問はVCの掲示板にするべきだったでしょうか?
でもVBも絡んでるので、こちらでも良いですよね。。

編集 削除
魔界の仮面弁士  2003-11-17 15:06:56  No: 110000  IP: [192.*.*.*]

VB6のTextBoxであれば、hWndプロパティの値をC側に渡せば、
そこからEM_系メッセージなどを使って制御する事ができるかと。

編集 削除
ねろ  2003-11-17 17:01:56  No: 110001  IP: [192.*.*.*]

つまりこんな感じですか
VB側
Private Declare Sub SetText Lib "settext.dll" (ByVal hwnd As Long)
Private Sub Command1_Click()
    Call SetText(Text1.hwnd)
End Sub

C側
#include "winuser.h"
#define  WM_SETTEXT    0x000C
void __declspec(dllexport) __stdcall SetText(HWND hWnd);
void __declspec(dllexport) __stdcall SetText(HWND hWnd){
    SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)"dllからセット");
}

編集 削除
岡田 之仁  2003-11-17 22:56:15  No: 110002  IP: [192.*.*.*]

DLL(C言語)では無理ですが・・・
MFCを使ったActiveX では、コントロールのディスパッチポイント
を受け取れますので、可能です。

ヘルプで、Dispatch とか、Invoke の項目で検索してみて下さい。

ですが、MFCでActiveXを作成するのもかなりの難易度です
ので、他のコントロールの制御を連継するには、なかなかの時間を要
すると思いますが・・・

以上。

編集 削除