主程序已实现如下接口,
interface Inf 
{
virtual HWND geth() PURE;
virtual RECT getRect() PURE;
};DLL中定义并实现如下接口
interface ICon
{
virtual void draw(HWND wnd, RECT & rc) PURE;
virtual void on_view() PURE;
};主程序和DLL间通过如下函数实现通信
extern "C" __declspec(dllexport) bool dll_init(Inf * p_in/*IN*/, ICon ** p_out/*OUT*/)
{
      //实现
}现在的问题是,Inf接口比较好调用,而ICon应如何实现?即draw和on_view如何和ICon关联起来?
涉及双指针,不太会,请各位指点

解决方案 »

  1.   

    还是没怎么看懂你的问题。你的dll_init实现什么功能?
      

  2.   

    不知道是不是我没有理解LZ的意思。不过我感觉很简单。exe只要知道ICon的声明就行了,然后定义一个ICon的指针,然后再将这个指针的地址(注意是指针的地址,也就是指向这个指针的指针)传递给dll_init。然后再exe中就可以调用了。exe不用知道ICon的具体定义。
      

  3.   

    我所知道的都在这里了,EXE是已经实现了的,并且我也不知道的,但是可以通过
    interface Inf  
    {
    virtual HWND geth() PURE;
    virtual RECT getRect() PURE;
    };
    这个接口来调用的,而且确实可以用,剩下的就是DLL中ICon这个接口的实现,要在DLL中实现,并且供EXE调用。
      

  4.   

    extern "C" __declspec(dllexport) bool dll_init(Inf * p_in/*IN*/, ICon ** p_out/*OUT*/)
    -------------
    看这个意思,MS ICon是一个传出参数。我猜想是否需要在Dll中new 一个Icon的对象,把地址传出。关于,你这个Dll,你需要增加Inf和ICon的实现类。实现类需要派生自Inf和ICon,并实现他们的纯虚函数。dll_init()估计就是Create你的ICon实现类,将地址由p_out带回。以后Exe就可以透过ICon 接口的指针来调用你Dll提供的功能了。
      

  5.   

    因为是虚函数,你只需要有一个实现类,派生自ICon,并实现draw和on_view这两个纯虚函数即可。
    C++虚函数机制会保证主程序调用ICon的接口方法能进入到你实现类的方法中。