我在DLL文件里面写了几个函数,调用的时候发现有时候出现堆栈错误,于是打算追踪一下。首先打开该DLL的工程,在RUN|PARAMATER中设置好调用了该DLL的应用程序,然后执行。按说这样就可以吧,但是却发现我在函数中设置的断点都不可用,为什么呢?代码如下:这是把一个DBGrid中选中的记录添加到另一个DBGrid的过程。
{$R *.res}
  procedure SelectRecord(Source,Target:TDBGridEh;ADOCon:TADOConnection;sqlstr,Key:string);
  var
    i,j:integer;
    TempADO:TADOQuery;
    TempDS:TDataSource;
  begin
    TempADO:=TADOQuery.Create(nil);
    TempDS:=TDataSource.Create(nil);
    TempDS.DataSet:=TempADO;
    with TempADO do
      begin
        Connection:=ADOCon;
        SQL.Clear;
        SQL.Add(sqlstr);
        Prepared;
        Open;
      end;
  try
  if Source.SelectedRows.Count>0 then
     with Source.DataSource.DataSet do
       for i:=0 to Source.SelectedRows.Count-1 do
         begin
           GotoBook(pointer(Source.SelectedRows.items[i]));
           if  not TempADO.Locate(Key,fieldbyname(Key).Value,[loCaseInsensitive]) then
              begin
                 TempADO.Append;
                 for j:=0 to TempADO.FieldCount-1 do
                 TempADO.Fields[j].Value:=Fields[j].Value;;
                 TempADO.Post;
              end else
                 messagedlg('选择的纪录已经存在。'+#13+'主键='+fieldbyname(key).AsString,mtinformation,[mbok],0);
         end;
  finally
  TempADO.Free;
  TempDS.free;
  end;
  end;
//导出过程
exports
  SelectRecord index 1;
begin
end.