var
  DllApp:TApplication;
//创建主窗口
function CreateMainForm:Integer;stdcall;
begin
  try
    frmMain := TfrmMain.Create(DllApp);
    frmMain.Show;
    Result := 0;
  except
    Result := -1;
    frmMain.Free;
  end;  
end;
//这里一执行完就报内存错误,但是窗口照样显示。
//函数输出列表
exports
CreateMainForm;begin
  DllApp := Application;
end.

解决方案 »

  1.   

    问题的关键不在这里,而在DLL的DLLPROC!
    要重写DLLPROC指向的过程……
    网上有很多这样的例子,自己找找吧!
      

  2.   

    首先,确保EXE方面的CreateMainForm函数的定义有stdcall修饰:
    function CreateMainForm: Integer; stdcall; external 'testdll.dll';大概是因为 DLL 中的 Application 未正确初始化造成。三个方法(三者选一或三者全有):
    1、将EXE和DLL都做成需要Runtime Package的,Project Options | Packages | Build with Runtime Packages,确保VCL的核心包都在了;
    2、在调用CreateMainForm之前想办法把
    3、你把DllApp做成CreateMainForm的参数吧,从EXE中传入,做为该FORM的Owner。另外,错误信息是什么?好多人不写错误信息,纳闷……
    --
    http://www.agui.googlepages.com
    mailto: agui.cn @ gmail.com