vc写的一个dll,实现一个dialog(派生自CDialog),作为一个子窗口显示在delphi程序的panel中。
要求这么做,是因为在dll中不只是显示窗口,还要有用户交互,可以在其中实现矩形的选中、拖拉,填充颜色等操作,我想用mfc中的CRectTracker实现,要将其作为dialog类的成员变量才可
  给出正确解决方案(例子),开帖送分,190分全部奉上

解决方案 »

  1.   

    用CStatic不就行了吗?
    用MFC作一个扩展 dll.
    调用dll时指定这个CStatic的父窗口句柄。
    再记着在相关位置切换程序的资源句柄就OK了。
    AfxSetResourceHandle(???还是什么来着,想不起来了。
      

  2.   

    如果是我,就在VC开发的DLL窗口的调用函数中定义一个结构体,用来传递与返回交互信息。
    子窗体应该没什么问题,传递父窗体/控件的hwnd就可以。
      

  3.   

    to  lzzqqq(Jonersen):我说过问题解决开帖送分,绝不食言。你说的用扩展dll.delphi如何调用
      

  4.   

    直接在dll中创建子窗口, 实现消息处理,用户交互;至于数据结果如何传递那有很多方法看你具体实现了。?? 什么叫如何调用, dll引出函数中传入父窗口句柄啊, 有了句柄剩下的就是创建窗口处理消息了
    父窗口是用什么创建的根本没有影响, 你就当实现一个mfc dialog就ok了。你的问题实际上是如何在dll和调用方之间传递数据, 这个最简单的办法就是自定义结构体, 然后dll返回结构变量指针给delphi
      

  5.   

    to captainwh(wh),能不能给个例子
      

  6.   

    DELPHI不支持导出类的DLL,你要实现窗口等代码随便怎么写,但导出的必须是stdcall方式的函数,简单的说就是必须再次封装,比如导出一个CreateMyWindow(HWND hParent)的函数,在这个函数里面实现MFC窗口的创建等。
      

  7.   

    比如你的dll接口函数是这样的:extern "C"
    {
        int __stdcall CreateMyWindow(HWND hwnd);
    }// 在CreateMyWindow函数中, 已经有了父窗口句柄, 剩下的工作就是创建对话框, 将它做为hwnd的
    // 子窗口显示出来, 整个对话框类的实现和通常的对话框程序并没有什么不同的地方。delphi中的dll接口声明(好久没用delphi了, 写错了别怪我):unit Mydll;
    interface
        function CreateMyWindow(hParent: HWND): integer; stdcall; external 'Mydll';
    end.