一般我们都是在主程序中调用dll中的函数或者过程,但是怎么在dll中何调主程序中的一些事件?
比如有个主程序,主窗体上面有个按钮和定义了一个自定义过程A,点击此按钮之后弹出dll中的Form,此Form上有个模态按钮
点击后,要触发过程A,要怎么做?谢谢

解决方案 »

  1.   

    回调函数。声明函数
    type
      TOnBlackEvent = procedure() of object;
    DLL:
      
      procedure input(AOnBlackEvent: TOnBlackEvent); stdcall;exports
      input;FORM:
       Input(Form1.OnBlackEvent);
      

  2.   

    能不能给个具体的例子呢?
    我要是想在dll中设置主窗体的一些属性呢,比如在dll中设置主窗体的的颜色
    要怎么做呢,最好有具体的例子,谢谢啦~
      

  3.   

    最好的办法是软件分层,底层放一个dll,包含主窗体所有要实现的接口,比如修改颜色的接口,添加一个菜单项的接口,然后留一个全局可以看到的主窗体接口指针。主窗体的exe一启动就把主窗体的实例付给上面dll的那个接口指针。主窗体必须实现接口要求的所有方法和属性。这样所有引用到底层dll的其他插件dll都可以拿到这个接口的实例进行操作。虽然也可以在主窗体调用插件dll的时候把主窗体实例传给插件dll,但是从Delphi IDE Open Tools API的设计来看,使用全局变量的方式更加简单有效。