function GetColor(AHandle: THandle; Col: LongInt): LongInt;
var
  Form1: TForm1;
begin
  Application.Handle := AHandle;×××××××××××××××××××××
  Result := Col;
  Form1 := TForm1.Create(Application);
  try
    Form1.SelColor := Col;
    if Form1.ShowModal =mrOK then
      Result := Form1.Shape1.Brush.Color;
  finally
    Form1.Free;
  end;
end;以上程序是一个DLL的输出函数,由调用程序(主程序)调用。其中×××××××××××这一行有什么作用?为何要把调用程序(主程序)的句柄传给dll。我试过删除这一行程序执行时也没问题。请高手指教!!谢谢

解决方案 »

  1.   

    因为它下面写到了:
    Form1 := TForm1.Create(Application);
    这样Form1就属于Application的一部分,也就是说,当Application释放的时候,会自动释放Form1.如果写成:
    Form1 := TForm1.Create(nil);
    就必须自己释放Form1,要不在关闭Application时,可能会产生内存泄漏不过他这里是模式显示窗体,并用finally保证释放,用不用Application和Handle无所谓,但如果为非模式显示窗体,还是这样的好
      

  2.   

    如果是非模式显示窗体,Application.Handle := AHandle;这一句有什么用哪?
    如果只是保证释放form1那么我可以在finally里free掉;另外,即使要Form1 := TForm1.Create(Application);这里的Application是Dll的Application,这么看也没有必要把主程序的application传过来:Application.Handle := AHandle;是不是??????????????????????
      

  3.   

    呵呵,我也记不清了是模式还是非模式状态下,如果没把Application.handle传到Dll里,
    Dll里的窗体显示时会在任务栏上出现按纽,而不象普通的调用窗体不会在任务栏上增加额外按纽。