我的Form里只有这四个控件:
    ADOConnection1: ;
    ADOQuery1: ;
    ClientDataSet1: ;
    DataSetProvider1: 
ADOConnection1的ConnectionString已经写好,并且能够连接上数据库,但我想让它在Dll的函数中再连接,
是这样写的,但调用时,老是返回"01",连form也没有Create 成功这是为什么?
请高手指教!function ConnectDatabase():PChar;stdcall;
begin
  Result:='1';
  try
    Form1:=TForm1.Create(Application);
    Form1.ShowModal;
  except
    Result:='01';
    Exit;
  end;
  try
    form1.ADOConnection1.Connected:=True;
  except
    Result:='02';
    Exit;
  end;
end;

解决方案 »

  1.   

    Form1:=TForm1.Create(Application);
    Application.handle应传入赋给他,把EXE中的Application.handle赋给他,再
    Form1:=TForm1.Create(Application);
      

  2.   

    EXE中的Application.handle与DLL中的Application.handle是不同的,所以要传入
      

  3.   

    怎么写呢?
    我其实是用在VBA中!
    我以前写的DLL都可以啊!
    这个为什么不行呢!我确实是抄过来的!
    谢谢了!
      

  4.   

    定义一个整型的参数赋给他
    调用时传入Application的名柄
      

  5.   

    都错!
    ADO是MS的东东,对于DELPHI来说,就是调用了COM,
    在dll中使用ADO要进行初始化!
    否则抛出 EOleSysError 异常!!
    所以要在你创建之前调用CoInitiaLize(nil)使用完以后再调用coUnInitiaLize.这两个函数在ACTIVEX单元中
      

  6.   

    对对对,就是EOleSysError 这个错误提示!
    请教如何写啊!谢谢了!
      

  7.   

    你用到的ado组件,是ActiveX,在dll中是要初始化的,创建前,先要: CoInitialize(nil);
    最后,释放时,要用到: CoUninitialize;
      

  8.   

    uses ActiveX;
    ……
    CoInitialize(nil);
    Form1:=TForm1.Create(Application);……CoUninitialize;
    就行了
      

  9.   

    CoUninitialize;
    写在哪儿啊!
    我的form不show出来,不能写在formonclose里啊!
    真的没用过!谢谢了!
      

  10.   

    是不是要单独写一个function来释放它!
      

  11.   

    写在form1.free后面就行了
    等等,晕!你的代码里怎么,没有free?
      

  12.   

    对不起,放了写释放form了,谢谢了!
      

  13.   

    form1.ADOConnection1.Connected:=True;
    直接写在form1的create或者show里你这样写,要等到Form1.ShowModal;完了,也就是你关闭窗体以后才能执行!
      

  14.   

    其实我没有这一句,只是为了调试才写的!
    Form1.ShowModal
    请问把
    form1.ADOConnection1.Connected:=True;
    写在formCreate里好呢,还是单写一个function好呢!?
      

  15.   

    function ConnectDatabase():PChar;stdcall;
    begin
      Result:='1';
      try
        CoInitialize(nil); //uses  Activex
        Form1:=TForm1.Create(Application);
        Form1.ShowModal;
      except
        Result:='01';
        Exit;
      end;
      try
        form1.ADOConnection1.Connected:=True;
      except
        Result:='02';
        Exit;
      end;
    end;在FormClose中
    Couninitialize;
      

  16.   

    谢谢了!
    顺便帮我看一下这个
    http://expert.csdn.net/Expert/topic/2098/2098223.xml?temp=.4564783