这个很麻烦啊。我编写了一个ADSL拨号的DLL,可是我不知道怎么发消息给调用它的主程序。请教大家,以后做出来后,将发布代码,虽然我的代码写的很烂 ^_^

解决方案 »

  1.   

    因为我要将ADSL的各个状态发送到调用它的主程序中,以前一直用CWnd做为指针,调用的时候,先传递这个指针就可以了,然后 
    m_pMainWnd->PostMessage(...);
    现在不用MFC类做了,我就不知道怎么做了,查了半天,C++里面根本没有这个对应的CWnd类。
    难道直接用PostMessage,我又不会,因为:
    PostMessage参数中有一个HWND参数,我该怎么设置这个参数呢?我现在并不知道主窗口的HWND指针啊。
    以前一直用MFC,真是害人啊。
      

  2.   

    你使用HWND这个窗口句柄类型代替CWnd类不就行了吗?在CWnd类中的m_hWnd就是这种类型的成员变量。用HWND类型对应着Windows系统创建的每个窗中的句柄的类型,因此,你可以使用Api函数postmessage来发送的你的消息。
      

  3.   

    可以用FindWindow找到目标窗口,然后用PostMessage来发送消息
    或者在你的dll提供一个接口,该接口用于注册接收消息的窗口句柄,这样就获得了界面的窗口句柄,就可以用PostMessage了
      

  4.   

    可以这样不?.h中:
    HWND hWnd;
    .cpp中
    void SetHwnd(HWND hwnd)
    {
        hWnd=hwnd;
    }
    ...
    PostMessage(hWnd,MYMESSAGE,lParam,wParam);主程序中:
    SetHwnd(this);我总觉得传递的不是指针,可能会有问题吧。行吗?
    盼望哪位老大给点代码,谢谢。
      

  5.   

    CWnd和HWND应该都可以互相转换
      

  6.   

    没有CWnd指针,你可以传递HWND句柄!
      

  7.   

    应该这样。
    主程序中:
    SetHwnd(this->m_hWnd);
      

  8.   

    SetHwnd(this);
    应该改成:
    SetHwnd(this->m_hWnd);
      

  9.   

    也可以用回调函数阿。在主窗口内注册一个回调函数,在调用dll的时候把这个回调函数的地址传进去,以后如果dll要给主窗口发消息的时候,用调用这个回调函数代替。