function ExecSQL(var ADOQuery: TADOQuery;SQLString: PChar;IsOpen: Boolean): Boolean;
begin
  with ADOQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add(SqlString);
    try
      if IsOpen then Open
      else ExecSQL;
      Result := True;
    except
      Result := False;
    end;
  end;
end;
这是在DLL中写的,我在外面调用如下:
procedure TForm1.Button13Click(Sender: TObject);
var
  ADOQry: TADOQuery;
  ADDR: DWord;
begin
  ADOQry := TADOQuery.Create(nil);
  try
    ADOQry.Connection := sqlADOCon;
    PublicDBFunExport.ExecSQL(ADOQry,'Select * from sysdatabases',False);
  finally
    FreeAndNil(ADOQry);  //a
  end;
end;
在执行a的时候出错“Invalid pointer Opreation”,为什么??我看过ADOQry的地址是不变的

解决方案 »

  1.   

    ADOQry.Close; 
     FreeAndNil(ADOQry);  //a
      

  2.   

    aiirii大哥,那样没有解决问题啊!!
      

  3.   

    还是“Invalid pointer Opreation”错误
      

  4.   

    问题解决了,在DLL单元和工程单元各假ShareMem; 下面是我查到的资料:
    1。 在dll中定义返回string字符串的函数时,如果没有特殊处理调用该函数
    在退出调用该函数的过程(函数/事件)时,会出现以下错误:
    Invalid Pointer Operator!
    2。当在单元中添加ShareMem时,在退出程序的时候会出现同样的错误
    3。当在调用dll的项目文件中(不是在单元文件)添加ShareMem时,能够正常
    运行.
    4. String类型是Borland自定的特殊类型,使用起来真是无比方便,
    但是,它需要borladmm.dll的支持,在动态链接库中想使用STRING类型
    要经过特殊的手段,因此还是使用PCHAR类型吧。PCHAR也挺方便的。
    另外如果没有特殊处理的话: WideString-可以
    AnsiString-不可以