var SaveExit : TDLLProc ;procedure LibraryProc(Reason: Integer);
begin
  {Library exit code }
  if Reason=DLL_PROCESS_DETACH then
    begin
      DllProc :=  @SaveExit ;
      DataModule1.Free;
    end;
end;exports
      func1
        ;begin
  SaveExit := @DLLProc;
  DLLProc := @LibraryProc;
  DataModule1 := TDataModule1.Create(nil);end.调用者是VC写的程序,动态调用,先LoadLibrary, 然后调用func1, 最后Freelibrary. 但是在Freelibrary的时候死循环,程序退不出来。 跟DLL的代码,也是在LibraryProc走完后就死掉了。

解决方案 »

  1.   

    真是奇怪啊, 在另外一台机器上运行,连loadlibrary都不行。 又在另外一台机器运行,loadlibrary, freelibrary都是好的,程序完全正常。这跟环境有关系吗
      

  2.   

    建议你在另一个单元中的 initialization 和 finalization 部分完成初始化和结束操作,对Delphi比较标准。比如:unit DataModuleLoader;interfaceimplementationinitialization
    DataModule1 := TDataModule1.Create(nil);finalization
    DataModule1.Free;
      

  3.   

    问题解决了。 是sharemem的问题,我在工程文件最前面加了sharemem, 去掉后,并且勾上了build with runtime package就好了。