我自己编写了一个dll文件,调用时需传递一个TStoredProc类型的参数,但是当被
传递的StoredProc打开时,调用时就会出现写地址错误,而被调用的StoredProc关闭的时候,不会出错,这是什么原因?
以下是源代码
procedure spShowForm(AHandle:THandle;strModule:string;strRegCode:string;spParam:TStoredProc);safecall;
var
  i:integer;
begin
  //sp,Module,RegCode,ArrayLen是全局变量
  Application.Handle:=AHandle;
  Module:=strModule;
  RegCode:=strRegCode;
  ArrayLen:=spParam.Fields.Count;
  sp:=spParam;
  frmReportPreview:=TfrmReportPreview.Create(Application);
  frmReportPreview.ds.DataSet:=sp;//sp和一个数据源相连
  frmReportPreview.ShowModal;
end;

解决方案 »

  1.   

    在传递复杂对象的时候在你的dll文件的第一位要包含sharemem单元,你调用的时候工程文件中同样要包含这个文件而且是第一位,原因吗?你找找相关的资料
      

  2.   

    使用sharemem限制比较多。
    传地址看看,就是定义为:
    procedure spShowForm(AHandle:THandle;strModule:string;strRegCode:string;spParamAddr: Integer);safecall;调用的时候给spParamAddr传入Integer(StoredProc1)在dll中再强制转化TStoredProc(spParamAddr)————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————