我在dll中可以包含可视化界面,放入一般的可视化组件如(label,edit,button)都没有什么问题但是如果我放入象adoconnection,adoquery这样的数据组件时,在程序一调用该dll时就出错.不知是在dll中本身就不能用数据组件还是我的方法问题.还有一个问题请教,有没有什么单步运行调试dll的方法.把函数和过程一封装入dll,就好象没有办法在运行程序时单步测试到该函数或过程,这样编起来就很麻烦.

解决方案 »

  1.   

    (in ActiveX.pas)
    你是需要使用
    CoInitialize(nil);
    CoUnInitialize;
    来初始化ActiveX COM的
    在Dll初始化时执行单步运行调试dll是需要写另外一个叫Dll Host的程序的(负责调用Dll的程序),Delphi中加载那个Host来单步调试dll,
      

  2.   

    同意楼上,因为ADOCONNECTION其实都是从MS ADO COM风状的;所以都需要初始化COM运行环境;
      

  3.   

    1。DLL是可以放数据组件的,但ADO的我没试过,远程数据模块不能放,数据集组件肯定能放,至于你程序的错误,要看原码才知道哦2。动态库的调试:Run -》Parameters -》Local在Host Appliction栏选择你用来调用DLL的EXE文件,然后你可设断点调试。注意:应把EXE文件所在目录中的与你调试的DLL同名的DLL删掉
      

  4.   

    ...
    procedure DllProcHandler(Reason:DWord);
    begin
      Case Reason of
        DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH: CoInitialize(nil);
        DLL_PROCESS_DETACH,  DLL_THREAD_DETACH: CoUnInitialize;
      end;
    end;exports ....begin
      DLLProc:=@DLLProcHandler;
      DLLProcHandler(DLL_PROCESS_ATTACH);
    end.