我想把pppoe拨号功能封装到activex里  用IE做程序界面 实现pppoe功能但是WINAPI RasDialFunc是个回调函数  是实时返回整个连接的动作因为是回调函数  它不能是类成员函数   没法使用连接点返回信息给IE恳求大神们赐教!!!谢谢!!!

解决方案 »

  1.   

    最简单的办法是 弄个全局指针保存activex的对象..
      

  2.   

    没玩过
    感觉应该搞个source-sink,把RasDialFunc封装在source里,Callback时fire sink
    做个Functor也许也是可行的,重载Operator()(....),把Functor传给windows不知道会不会买账
      

  3.   

    template<class T>
    class CProxy_IpppoeEvents :
    public IConnectionPointImpl<T, &__uuidof(_IpppoeEvents)>
    {
    public:
    HRESULT Fire_text()
    {
    HRESULT hr = S_OK;
    T * pThis = static_cast<T *>(this);
    int cConnections = m_vec.GetSize(); for (int iConnection = 0; iConnection < cConnections; iConnection++)
    {
    pThis->Lock();
    CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
    pThis->Unlock(); IDispatch * pConnection = static_cast<IDispatch *>(punkConnection.p); if (pConnection)
    {
    DISPPARAMS params = { NULL, NULL, 0, 0 };   //没有红
    hr = pConnection->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, NULL, NULL, NULL);
    }
    }
    return hr;
    }
    };上面的Invoke函数返回E_UNEXPECTED 错误   何解?
      

  4.   

    既然对PPPOE封装了一层,也同样可以对回调封装一层,回调函数在控件内部实现,在实现中去调用控件的连接点接口实现COM方式的回调
      

  5.   

    回调函数只能是静态函数  不知道怎么封装   按照akirya老大的方法  返回错误  不知道什么情况