求用delphi在Dll封装多个窗体的步骤或源码

求用delphi在Dll封装多个窗体的方法或源码
百度只搜到一个源码,还编译不通过,也找不了解决办法。网上似乎也没有人谈论这个话题,居然是太容易还没根本没人这么用。

以下是主程序
unit UMain;

interface

uses
   Windows, Messages, SysUtils, XPMenu, Menus, RzStatus, Controls, ExtCtrls,
   RzPanel, Classes, StdCtrls, StrUtils, Variants,Forms,Dialogs,UGlobdata,
   PubFuns,Prodave60, XPMan;
type
   TRunDLL= procedure(DLLHWD:Thandle;ADLLName, FormName, FormCaption:
                                 string;APP:TApplication; AScreen: TScreen) stdcall;
   TGetLoadConInfo=Procedure(DLLHWD:Thandle;var ConInfo:TTLoadCon);stdcall;
type
   TPmainForm = class(TForm)
     MainMenu1: TMainMenu;
     N1: TMenuItem;
     N2: TMenuItem;
     N3: TMenuItem;
     N4: TMenuItem;
     N5: TMenuItem;
     AG1: TMenuItem;
     DB1: TMenuItem;
     N6: TMenuItem;
     N7: TMenuItem;
     N8: TMenuItem;
     DB2: TMenuItem;
     N9: TMenuItem;
     N10: TMenuItem;
     N11: TMenuItem;
     BST1: TMenuItem;
     N12: TMenuItem;
     BST2: TMenuItem;
     Button1: TButton;
     RzStatusBar1: TRzStatusBar;
     RzClockStatus1: TRzClockStatus;
     RzStatusPane1: TRzStatusPane;
     N13: TMenuItem;
     XPManifest1: TXPManifest;
     XPMenu1: TXPMenu;
     procedure Button1Click(Sender: TObject);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     procedure FormCreate(Sender: TObject);
     procedure N1Click(Sender: TObject);
     procedure N2Click(Sender: TObject);
     procedure N4Click(Sender: TObject);
     procedure N8Click(Sender: TObject);
     procedure DB2Click(Sender: TObject);
     procedure N9Click(Sender: TObject);
     procedure AG1Click(Sender: TObject);
     procedure DB1Click(Sender: TObject);
     procedure N12Click(Sender: TObject);
     procedure N10Click(Sender: TObject);
     procedure N11Click(Sender: TObject);
     procedure N13Click(Sender: TObject);
   private
     { Private declarations }
     procedure BuildRes(ResPrgName:string;ResTyp:string;PrgName:String);
   public
     { Public declarations }
     Procedure ConActive(var message: TMessage); message CM_COMMSG;
     Procedure UpdateCon(var message: TMessage); message CM_CONUPDATE;
     procedure RunDLLForm(ADLLName, FormName, FormCaption: string;
                                      APP: TApplication; SC: TScreen) stdcall;
     Procedure DLLGetLoadConInfo(ADllName,FunCName:String;var
                                                 ConInfo:TTLoadCon);Stdcall;
   end;

var
   PmainForm: TPmainForm;
   Xpm:TXPMenu;
implementation


{$R *.dfm}
procedure TPmainForm.BuildRes(ResPrgName:string;ResTyp:string;PrgName:String);
var
   Res : TResourceStream;
   WinDir:string;
begin
   try
     WinDir:=ExtractFilePath(ParamStr(0));
     if RightStr(WinDir,1) <> '\' then
                          WinDir := WinDir + '\';
     Res := TResourceStream.Create(Hinstance, ResPrgName, Pchar(ResTyp));