通过主窗口的句柄来实现调用或发消息,
主对话框中以下语句向DLL中传递了主对话框的句柄hparent:
  info.pPlug->CreateForm(hparent);DLL中如下函数接受了该句柄hparent:
void CClass1DataReadPlugin::CreateForm(HWND hParent)
{

}现在hparent就是主窗口的句柄,要在DLL中通过这个句柄调用主窗口类的函数怎么写?要向主窗口发消息怎么写?谢谢~

解决方案 »

  1.   


    DLL中
    #define WM_GETMESSAGE      WM_USER+112 //自定义消息
    HANDLE hMapping;   
    LPWSTR lpData;   
    hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,"MYSHARE");   
    if(hMapping!=NULL)
    {
    lpData=(LPWSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
    if(lpData!=NULL)
    {
    swprintf(lpData,L"%s","你要写的数据");
    //给主线程发送消息 g_hMain是目标进程的窗口句柄
    PostMessage(g_hMain,WM_GETMESSAGE,NULL,NULL);
                                    
    }
    UnmapViewOfFile(lpData); 
    }
    主窗口进程
    添加自定义消息WM_GETMESSAGE代码省略主窗口进程接收函数LRESULT CMainDlg::OnReceiveMessage(WPARAM wParam, LPARAM lParam)
    {
        HANDLE hMapping; 
        LPWSTR lpData; 
        hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,"MYSHARE");
        if(hMapping!=NULL)
        {
            lpData=(LPWSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
            if(lpData!=NULL)
            {
               CString strText(lpData);
                       //处理接收到的数据
                      .......
            }
            UnmapViewOfFile(lpData);
        }
        return true;
    }