CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

dll中的窗体之间数据传递~~~~~~~~问题

楼主relive8(飘叶)2004-12-01 15:57:07 在 Delphi / Windows SDK/API 提问

外部程序调用一个dll函数创建一个窗体(此窗体为   a   窗体),   在此dll内部通过   a   窗体创建   b   窗体  
  ,并且把   a   窗体的数据传递给   b   窗体   进行操作。  
  -----------前面都能实现,接下来就不行了  
  b窗体操作完以后我要把数据传回给   a   窗体,同时关闭   b   窗体,结果内存报错!  
   
  请各位高手帮帮忙,先谢过了! 问题点数:20、回复次数:13Top

1 楼bee2518(迷茫ing)回复于 2004-12-01 15:59:03 得分 4

应该是创建的对象没有释放完整  
  检查一下Top

2 楼relive8(飘叶)回复于 2004-12-01 15:59:58 得分 0

忘记写问题点数,默认的是20了,如果解决开贴再送分Top

3 楼RockEx(石头)回复于 2004-12-01 16:02:00 得分 3

你返回的数据固定吗  
  比如说数据为的类型......  
  说的详细一些。Top

4 楼relive8(飘叶)回复于 2004-12-01 16:08:16 得分 0

TB   =   class(TForm)  
          Button1:   TButton;  
          Edit1:   TEdit;  
          procedure   Button1Click(Sender:   TObject);  
  end;  
   
  procedure   TB.Button1Click(Sender:   TObject);  
  begin  
          try  
                  a.Memo1.Lines.Append('sd');  
          except  
                  showmessage('出错误了');  
          end;  
  end;  
   
  结果报错误,好象是不能访问   窗体   a   中的对象  
   
   
   
  Top

5 楼relive8(飘叶)回复于 2004-12-01 16:12:56 得分 0

procedure   TA.Button4Click(Sender:   TObject);  
  begin  
          Application.CreateForm(TB,B);  
          b.Edit1.Text   :=   memo1.Text;  
          b.ShowModal   ;  
  end;  
   
  这写都是封装在dll中的Top

6 楼relive8(飘叶)回复于 2004-12-02 08:47:03 得分 0

今日高手多多,往上顶Top

7 楼LouisCool(迷惘)回复于 2004-12-02 08:57:55 得分 3

b窗体操作完以后我要把数据传回给   a   窗体,同时关闭   b   窗体,结果内存报错!  
   
  你是在B窗体里面关闭的B窗体吧?如果是的话,那这样是肯定出错的!Top

8 楼relive8(飘叶)回复于 2004-12-02 10:09:20 得分 0

我把代码列出来,大家来看分析一下:  
  //Project2.dll代码如下:  
  library   Project2;  
  uses  
      ShareMem,  
      SysUtils,  
      Classes,  
      Unit2   in   'Unit2.pas'   {Form2},  
      Unit4   in   'Unit4.pas'   {Form4};  
   
  {$R   *.res}  
  {   下面的语句用于向调用该   DLL的程序提供调用接口   }  
   
  exports  
          TestFrm,   {   过程来自单元Unit2   }  
          GetStr;  
  begin  
  end.  
   
   
  //-------------------------'Unit2.pas'   代码如下:  
  unit   Unit2;  
  interface  
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   DB,   ADODB,   StdCtrls;  
   
  type  
      TForm2   =   class(TForm)  
          Memo1:   TMemo;  
          Button1:   TButton;  
          Button2:   TButton;  
          Button3:   TButton;  
          Button4:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   Button3Click(Sender:   TObject);  
          procedure   Button4Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
   
      public  
          {   Public   declarations   }  
          ADOConnection1   :   tADOConnection;  
  end;  
   
   
   
  var  
      Form2:   TForm2;  
   
  {   该过程向外提供   }  
   
  procedure   DoTest(H:   THandle;   {   获得调用者的句柄   }  
  AConn:   TADOConnection;{   获得调用者的数据库连接   }  
  S:   string;   {   获得一些文本信息   }  
  N:   Integer;comminfo:TCommonInfo);   {   获得一些数值信息   }  
  cdecl;   {   指定调用协议   }  
   
   
  function   GetStr(iStr:string):string;  
   
   
   
   
  implementation  
   
  uses   Unit4;  
   
  {$R   *.dfm}  
  procedure   ShowForm3(H:THandle);stdcall;external   'Project3.dll';  
   
   
  procedure   DoTest(H:   THandle;   AConn:   TADOConnection;   S:   string;   N:   Integer);  
  var  
          frmdll   :   TForm2;  
  begin  
          Application.Handle   :=   H;  
          frmdll   :=   TForm2.Create(nil);  
          with   frmdll   do  
          try{   创建窗体   }  
                  Memo1.Lines.Append('成功调用');  
   
                  ADOConnection1   :=   AConn;  
                  //------------------------------------------------------  
                  memo1.Lines.Append(comminfo.StaffName);  
                  memo1.Lines.Append(comminfo.StaffPassword);  
                  frmdll.Show;  
          finally  
                //   Free;   {   调用结束时销毁窗口   }  
          end;  
  end;  
   
   
   
  function   GetStr(iStr:string):string;  
  begin  
          result   :=   iStr   +   iStr   ;  
  end;  
   
   
  procedure   TForm2.Button1Click(Sender:   TObject);  
  begin  
          close;  
  end;  
   
  procedure   TForm2.Button2Click(Sender:   TObject);  
  begin  
          ShowForm3(Application.Handle);  
  end;  
   
  procedure   TForm2.Button3Click(Sender:   TObject);  
  var  
          MyQuery   :TAdoQuery;  
          SqlStr   :   string;  
  begin  
          //-----------------------------------------------------  
          MyQuery   :=   TAdoQuery.Create(nil);  
          with   MyQuery   do  
          begin  
                  connection   :=   ADOConnection1   ;  
                  SqlStr   :=   '   select   *   from   officestar..person   ';  
                  if   active   then  
                          close;  
                  sql.Clear;  
                  sql.Add(SqlStr);  
                  open;  
                  if   not   IsEmpty   then  
                  begin  
                          while   not   Eof   do  
                          begin  
                                  memo1.Lines.Add(fieldbyname('psnname').AsString);  
                                  next;  
                          end;  
                  end;  
          end;  
          MyQuery.Free;  
  end;  
   
  procedure   TForm2.Button4Click(Sender:   TObject);  
  begin  
   
          Application.CreateForm(TForm4,Form4);  
          form4.Edit1.Text   :=   memo1.Text;  
          form4.ShowModal   ;  
  end;  
  end.  
   
   
  //----------------------'Unit4.pas'的代码如下:  
  unit   Unit4;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TForm4   =   class(TForm)  
          Button1:   TButton;  
          Edit1:   TEdit;  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form4:   TForm4;  
   
  implementation  
   
  uses   Unit2;  
   
  {$R   *.dfm}  
   
  procedure   TForm4.Button1Click(Sender:   TObject);  
  begin  
          try  
                  form2.Memo1.Lines.Append('sd');  
          except  
                  showmessage('出错误了');  
          end;  
          close;  
  end;  
   
  end.  
   
   
  问题:通过主程序调用可以产品   form2,   通过form2也可以产生   form4,就是在form4的  
  procedure   TForm4.Button1Click(Sender:   TObject);  
  执行后就出错了,不把form4关闭也出同样的错误,内存报错误,为什么不能回访form2中的内容呢??  
   
   
   
   
   
  Top

9 楼relive8(飘叶)回复于 2004-12-02 10:12:43 得分 0

纠正一下上面的  
  library     Project2;      
  uses      
        ShareMem,      
        SysUtils,      
        Classes,      
        Unit2     in     'Unit2.pas'     {Form2},      
        Unit4     in     'Unit4.pas'     {Form4};      
     
  {$R     *.res}      
  {     下面的语句用于向调用该     DLL的程序提供调用接口     }      
     
  exports      
                DoTest,     {     过程来自单元Unit2     }      
                GetStr;      
  begin      
  end.Top

10 楼relive8(飘叶)回复于 2004-12-08 08:37:54 得分 0

问题没有解决,UP一下Top

11 楼huaneww(向往牛人)回复于 2004-12-08 08:57:18 得分 3

关注~Top

12 楼zijida(左八荣,右八耻,代表挂腰间,和谐贴胸前,人挡杀人,佛挡杀佛!)回复于 2004-12-09 11:19:24 得分 3

建议:  
          不要在Form4里面试图操纵Form2,而是反其道而行之。Top

13 楼pl5th2001(白牙)回复于 2004-12-09 12:28:03 得分 4

90%的可能   :form1   创建   from2,在form2关闭时自己释放了,在form1中采用了form2.showmodal;   form2.free;的方法,这个   时候form1找不到form2,就报内存错误Top

相关问题

  • vb.net窗体之间数据传递
  • 窗体数据传递问题
  • 怎样在窗体间传递数据
  • Delphi 中怎样在窗体间传递数据
  • 如何实时地在两个窗体之间传递数据?
  • 窗体之间的数据传递问题
  • 如何在两个窗体中传递数据?
  • 求助!窗体间数据传递的问题!!!!
  • 程序中多窗体数据传递的问题
  • 100分求窗体间数据传递问题(在线).

关键词

  • 数据
  • 内存
  • 代码
  • dll
  • 窗体
  • tbutton
  • tobject
  • unit
  • 调用
  • button

得分解答快速导航

  • 帖主:relive8
  • bee2518
  • RockEx
  • LouisCool
  • huaneww
  • zijida
  • pl5th2001

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo