首页
社区
课程
招聘
[求助]请教在dll中如何接收WM_COPYDATA消息
发表于: 2010-5-13 08:58 5799

[求助]请教在dll中如何接收WM_COPYDATA消息

2010-5-13 08:58
5799
想通过WM_COPYDATA消息和注入到进程中的dll通信,该怎么在dll中创建消息循环呢,另外如果想要在DllEntryPoint创建一个窗口该怎么写好啊?
用应用程序中的方法好像不行啊?
TForm1 *Form1=new TForm1(Application);
Form1->Show();
(我用的是bcb 6)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
无论用BC还是VC,DLL入口想建窗口,必须开线程,在线程中建立窗口。
给你个BC的DEMO:
#include <vcl.h>
#include <windows.h>
#include "dlg.h"
#pragma hdrstop
#pragma argsused
typedef void __stdcall (*Pfun)(LPARAM);
HINSTANCE hInstance;
void __stdcall WinMain(LPARAM op1)
{
        MainF = new TMainF(0);
        MainF->ShowModal();
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
        if(fwdreason == DLL_PROCESS_ATTACH)
                {
                hInstance = hinstDLL;
                Pfun lpfunc = WinMain;
                HANDLE hThread = CreateThread(0,0,(DWORD(__stdcall*)(void*))lpfunc,0,0,0);
                CloseHandle(hThread);
                }
        return 1;
}
----注意,如果是把消息循环的处理交给类维护,需要使用ShowModal();否则线程立即结束,窗口一闪而逝。

如果是自建窗口,需要自建消息循环,以下是VC:

//================================================================
//                函数:注册窗口
//================================================================
ATOM MyRegisterClass(HINSTANCE hInstance)
        {
        WNDCLASSEX wcex;
        wcex.cbSize                        = sizeof(WNDCLASSEX);
        wcex.style                        = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc= WndProc;
        wcex.cbClsExtra        = 0;
        wcex.cbWndExtra        = 0;
        wcex.hInstance        = hInstance;
        wcex.hIcon                        = 0;
        wcex.hCursor                = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground        = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName        = 0;
        wcex.lpszClassName        = szWindowClass;
        wcex.hIconSm                = LoadIcon(wcex.hInstance,0);
        return RegisterClassEx(&wcex);
        }

//================================================================
//                函数:建立窗口并显示之
//================================================================
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
        {
        HWND hWnd;
        hWnd = CreateWindow(szWindowClass,TEXT(""),WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
        if (!hWnd)return FALSE;
        mainhwnd = hWnd;
        ShowWindow(hWnd,nCmdShow);
        UpdateWindow(hWnd);
        return TRUE;
        }
//================================================================
//                函数:建立窗口线程
//================================================================
DWORD WINAPI        start(PVOID lParam)
        {
        MyRegisterClass(NULL);
        if (!InitInstance(NULL,SW_HIDE))
                {
                MessageBox(0,TEXT("窗口初始化失败!"),szWindowClass,MB_ICONSTOP);
                return 0;
                }

        MSG msg;
        while(GetMessage(&msg,NULL,0,0))DispatchMessage(&msg);
        return (int) msg.wParam;
        }

//================================================================
//                函数:窗口消息回调
//                主要做Socket通讯
//                说明一下WM_DESTROY:
//                        自行处理WM_CLOSE消息时需要DestoryWindow(hWnd);
//                        并PostQuitMessage(0);
//                        而交给DefWindowProc处理,则自动调用DestoryWindow(hWnd);
//                        那个函数也是发送WM_DESTROY消息。
//                        SDK里说,两个消息,至少处理一个。这是IDE自建的,只是说明一下。
//================================================================
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
        {
        switch (message)
                {

....                case WM_DESTROY:
                        PostQuitMessage(0);
                        break;
                default:
                        return DefWindowProc(hWnd, message, wParam, lParam);
                }
        return 0;
        }

可惜啊可惜,没有分拿。。。
2010-5-13 09:39
0
雪    币: 116
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好详细啊,太感谢了!!!!!:D
2010-5-13 09:47
0
雪    币: 116
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2010-5-13 09:52
0
游客
登录 | 注册 方可回帖
返回
//