同题

解决方案 »

  1.   

    我也遇到类似问题,在dll的窗体中,未加入TADOConnection时,调用正确,加入TADOConnection后,出现错误,说尚未调用coinitialize
      

  2.   

    调用此dll的程序编写时,也要uses下adodb单元,才能完成初始化
      

  3.   

    按下面的就ok了library name;uses
      ActiveX,//必须的
      //...
    procedure HISCOM(Proc: DWord);
    begin
      case Proc of
        DLL_PROCESS_ATTACH:
        begin
          CoInitialize(nil);  //初始化它啦
        end;
        DLL_PROCESS_DETACH:
        begin
          CoUnInitialize;
          dm_BaseTableOPD.Free;
          Application := OldHandle;
        end;
        DLL_THREAD_ATTACH:
        begin    end;
        DLL_THREAD_DETACH:
        begin    end;
      end;
    end;
    //...
    //...
    begin
      DllProc := @HISCOM;
      HISCOM(DLL_PROCESS_ATTACH);
    end.
      

  4.   

    procedure ShowForm(hOwner: hInst;ADOConnection1:TADOConnection);stdcall;
    procedure ShowForm(hOwner: hInst;ADOConnection1:TSocketConnection);stdcall;
    begin
     try
      Application.Handle:= hOwner;
      Application.CreateForm(TDM, DM);
      DM.ADOConnection1.ConnectionString:=ADOConnection1;
      DM.F_TechnicsMaster.Open;
      DM.F_TechnicsDetail.Open;
      Application.CreateForm(TForm_Main, Form_Main);
       Form_Main.ShowModal;
     finally
      DM.F_TechnicsDetail.Close;
      DM.F_TechnicsMaster.Close;
      DM.free;
      Form_Main.Free;
     end;
    end;
      

  5.   

    begin
    CoInitialize(nil);  
    DLLFunction;
    end;