dll初始化和释放…………
procedure MyDLLHandler(Reason: Integer);
begin  
  case Reason of
    DLL_PROCESS_ATTACH:
                       begin
                         FXMLDoc := TDOMDocument30.Create(nil);
                       end;
    DLL_PROCESS_DETACH:
                       begin
                         FXMLDoc.Free;
                         if FXMLDoc = nil then
                           SHowmessage('ok');
                       end;
    DLL_THREAD_ATTACH:;
    DLL_THREAD_DETACH:;
  end;
end;
……
begin
  DLLProc := @MyDLLHandler;
  MyDLLHandler(DLL_PROCESS_ATTACH);
end.问题:只要一执行FXMLDoc.Free;就出现地址错误。不释放又不行。该怎样处理?
如果声明的是TStringList的实例,释放时(….free)就没有错误。是不是和TDOMDocument30有关?我该如何释放它呢??
谢谢大家!

解决方案 »

  1.   

    uses SysUtils;将
    FXMLDoc.Free;
    改为:
    FreeAndNil(FXMLDoc);试试。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    >> lxpbuaa(桂枝香在故国晚秋)
    试过了,不行:(
      

  3.   

    >>DWGZ() 
    什么意思?
      

  4.   

    支持dwgz
    showmessage怎么拿到dll的定义里面了?
      

  5.   

    我只是看一下它有没有释放,ok,删去 if FXMLDoc = nil then                       SHowmessage('ok'); 也照样报错。  谢谢大家。
      

  6.   

    有了一些眉目:
        如果FXMLDoc := TDOMDocument30.Create(nil);建立完,什么也不操作,FXMLDoc.Free;没有错误。
        如果FXMLDoc建立后进行FXMLDoc.DefaultInterface.load(StrFileName);操作,那么释放时出现地址错误。
        问题是否出在FXMLDoc.DefaultInterface?
      

  7.   

    其它问题我不知道
    但是在DLL  释放的时候是不能ShowMessage的
      DLL_PROCESS_DETACH:
                           begin
                             FXMLDoc.Free;
                             注掉//if FXMLDoc = nil then
                             //  SHowmessage('ok');
                           end;
      

  8.   

    设断点看看呀
     //if FXMLDoc = nil then
         // SHowmessage('ok'); --这个也是窗体的
    如果真的要消息的话,你用Application.messageBox,看看