在单独的.pas中定义如下class:
type
    TModem = class(TObject)
    private
      fMSComm: TMSComm; 
      ……
    protected
      destructor Destroy; override;
    public
      constructor Create(aMSComm: TMSComm);
      ……
  end;implementation
  
constructor TModem.Create(aMSComm: TMSComm);
begin
  fMSComm := aMSComm;
  ……
end;在窗体中:var
  Modem: TModem;
  MSComm1: TMSComm;
  ……
implementation{$R *.dfm}procedure TfrmManager.Button1Click(Sender: TObject);
begin
  Modem.Create(MSComm1);
end;这样是不对的,该如何调用呢? 谢谢。

解决方案 »

  1.   

    晕了少了一个 MSComm1 := TMSComm.Create(nil);不过 nil和self 有什么区别呢?
      

  2.   

    在 Destroy;
     中要
    MSComm1.free;
    MSComm1:=nil;
      

  3.   

    Self就是指定Form1为它的Owner,
    在程序结束的时候,由Owner (即Form1)来
    负责MSComm1的析构,也就是说
    Form1会调用MSComm1.Free;而不用你来显式调用的。
    如果Create(nil)的话,就要你自己来显式调用MSComm1.Free
    来皙构它了。
    不过只要是不服务程序,windows会在你程序结束后
    全部回收的。
      

  4.   

    你都会用 MSComm1 := TMSComm.Create(nil)了,怎么这个不会呢Modem:=TModem.Create(self);
      

  5.   

    呵呵,不好意思,搞错了,应该是Modem:=TModem.Create(MSComm1);
      

  6.   

    try
      Modem := TModem.Create(MSComml);
    finally
      Modem.Free;
      Modem := Nil;
    end;
      

  7.   

    subsky(猛回头) 
    的代码是比较安全的代码!
      

  8.   

    MSComm1 := TMSComm.Create(MSComm1);
      

  9.   

    DeathCat(从死亡边缘站起来的患了狂猫病的猫) 的也可以